繁体   English   中英

HSQLDB 数据库中神秘的完整性约束违规

[英]Mysterious integrity constraint violation in HSQLDB database

除了 SQL Server 和 Oracle 等企业数据库之外,我们正在设计 Java 应用程序以支持 HSQL 数据库。 我的任务是编写一个全面的测试套件,涵盖应用程序中的主要数据库操作。 测试套件为 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 的持久层存在一些问题/错误,但我无法确认这一点。

经过更广泛的测试,我们发现类似的问题也在 SQL Server 和 Oracle 上广泛出现。 事实证明,我们没有关闭FAVORITE_FILE表上的事务。 这个 Hibernate 错误是我们收到错误消息的根本原因。 关闭事务导致错误消失。

这个问题对我们来说是一个很好的学习经验,因为我们意识到当遇到 Hibernate 错误时,我们应该在质疑数据库之前质疑我们自己代码的正确性。

从 4.6.2 迁移到 4.7 后同样的问题,幸运的是它正在与 HsqlDb 一起使用最新的当前版本:

compile "org.liquibase:liquibase-core:4.11.0"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM