微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

DBUnit/HSQL 如何用具有自外键的表初始化数据库?

如何解决DBUnit/HSQL 如何用具有自外键的表初始化数据库?

我想用 DBUnit 初始化 Hsql 数据库我有一张这样的桌子:

table EMPLOYEE( id,name,manager_id) // manager_id is nullable
     CONSTRAINT "fk_manager" FOREIGN KEY ("manager_id")
     REFERENCES EMPLOYEE("id)

问题是当我尝试用这个数据集初始化时:

<dataset>
  <EMPLOYEE id="2" name="John" manager_id="5"/> <!--Doe is the John's manager-->
  <EMPLOYEE id="3" name="Doe" manager_id="4"/> <!--Kong is the Does's manager-->
  <EMPLOYEE id="4" name="Kong" manager_id="2"/> <!-- John is the Kong's manager-->
</dataset>

我有这个例外:

Caused by: org.hsqldb.HsqlException: integrity constraint violation: foreign key no parent; fk_manager table: EMPLOYEE

如何解决错误?谢谢

解决方法

您需要插入不带 managerId 的第一行,并在插入包含其 managerId 的行后添加此值

INSERT INTO EMPLOYEE (id,name,managerId) VALUES (2,'John',null)
INSERT INTO EMPLOYEE (id,managerId) (VALUES 4,'Kong',2)
INSERT INTO EMPLOYEE (id,managerId) (VALUES 3,'Doe',4)
UPDATE EMPLOYEE SET managerId = 3 WHERE id = 2 

也可以在插入过程中关闭外键约束检查。您的数据集应该是一致的,并且不应包含对不存在的行的外键引用。

http://hsqldb.org/doc/2.0/guide/management-chapt.html#mtc_database_settings

SET DATABASE REFERENTIAL INTEGRITY FALSE
-- perform the inserts
SET DATABASE REFERENTIAL INTEGRITY TRUE

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。