如何解决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 举报,一经查实,本站将立刻删除。