【发布时间】:2016-06-16 10:53:45
【问题描述】:
我们正在设计我们的 Java 应用程序以支持 HSQL 数据库,以及 SQL Server 和 Oracle 等企业数据库。我的任务是编写一个全面的测试套件,涵盖应用程序中的主要数据库操作。测试套件为 SQL Server 成功运行,但是当我使用 HSQLDB 进行相同的测试时,我一直失败。这是堆栈跟踪的一部分:
Caused by: java.sql.SQLIntegrityConstraintViolationException: integrity constraint
violation: foreign key no parent; FKREQKDHUAI8BYVMWC5RMTJ3UFA table: FAVORITE_FILE
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(Unknown Source)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:384)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:204)
... 91 more
Caused by: org.hsqldb.HsqlException: integrity constraint violation: foreign key no parent;
FKREQKDHUAI8BYVMWC5RMTJ3UFA table: FAVORITE_FILE
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.Constraint.getException(Unknown Source)
at org.hsqldb.Constraint.checkInsert(Unknown Source)
at org.hsqldb.StatementDML.performIntegrityChecks(Unknown Source)
at org.hsqldb.StatementDML.insertSingleRow(Unknown Source)
at org.hsqldb.StatementInsert.getResult(Unknown Source)
at org.hsqldb.StatementDMQL.execute(Unknown Source)
at org.hsqldb.Session.executeCompiledStatement(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
... 95 more
这里真正神秘的是,失败发生在与FAVORITE_FILE 表无关的测试点。相反,我观察到在尝试对不同的表 (OFFLINE_FILE) 执行 INSERT 或尝试从不同的表中删除记录时发生此故障。
我希望专家能看到这个堆栈跟踪和用例,并能提供一些关于正在发生的事情的见解。重申一下,在 SQL Server 上运行时不会出现这些错误。我的预感是 HSQLDB 的持久层存在一些问题/错误,但我无法确认。
【问题讨论】:
-
我在 hsql 的 junit 中也遇到了类似的错误,你能分享一下你的 junit 类的代码吗?
-
您需要在 HSQLDB 项目论坛中发帖并附上指向此的链接。使用 SCRIPT 命令获取 DDL 并报告与表(父、外键和插入目标)相关的所有 CREATE 和 ALTER 行,包括任何索引。 sourceforge.net/p/hsqldb/discussion/73674
标签: java sql sql-server hibernate hsqldb