Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DbUnit无法清除插入:外键约束_Java_Mysql_Jpa_Testng_Dbunit - Fatal编程技术网

Java DbUnit无法清除插入:外键约束

Java DbUnit无法清除插入:外键约束,java,mysql,jpa,testng,dbunit,Java,Mysql,Jpa,Testng,Dbunit,我问和回答这个问题是为了将来的参考,因为我认为我已经找到了一个解决DbUnit常见问题的好方法。我希望它能帮助某些人,在某个领域 我使用的是dbunit2.5.0和testng6.8.8。我的用例是数据库的一部分,它由3个实体组成。有一个服务用户,它同时持有一个可管理和一个用户组的外键 我遵循了示例中的大部分代码 结果如下XMLDataSet(数据省略): 问题是我在上面创建的XMLDataSet不知道表中的外键约束,而是按字母顺序创建表列表。但是,CLEAN_INSERT操作会获取表列表并以相

我问和回答这个问题是为了将来的参考,因为我认为我已经找到了一个解决DbUnit常见问题的好方法。我希望它能帮助某些人,在某个领域

我使用的是
dbunit2.5.0
testng6.8.8
。我的用例是数据库的一部分,它由3个实体组成。有一个
服务用户
,它同时持有一个
可管理
和一个
用户组
的外键

我遵循了示例中的大部分代码

结果如下
XMLDataSet
(数据省略):


问题是我在上面创建的
XMLDataSet
不知道表中的外键约束,而是按字母顺序创建表列表。但是,
CLEAN_INSERT
操作会获取表列表并以相反的顺序遍历它,它要求在被引用的实体(此处:
userGroup
)之前删除外键引用(此处:
ServiceUser.userGroup_id

我通过和找到了这个信息

对DbUnit文档的一些小挖掘导致了创建数据集的正确方法,该方法检查外键依赖性并尝试对实体进行适当排序:

IDataSet fullDataSet = new FilteredDataSet(new DatabaseSequenceFilter(connection), connection.createDataSet());
结果:

<dataset>
  <administrable/>
  <usergroup/>
  <serviceuser/>
</dataset>

这将正确地
清洁\u插入


免责声明:我没有遇到循环依赖项或自引用外键,也没有测试过此修复程序是否可以处理它们。

我不确定您在问什么。我没有说任何关于代码片段的内容,所有相关的代码都可以在问题或答案中找到。您使用的代码IDataSet片段。您将其放在哪个文件中?它替换了
IDataSet fullDataSet=connection.createDataSet()@BeforeClass
方法中的code>
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException
Cannot delete or update a parent row: a foreign key constraint fails (`testing_db`.`serviceuser`, CONSTRAINT `FK_gyylcfbhpl2ukqs5rm7sq0uy8` FOREIGN KEY (`userGroup_id`) REFERENCES `usergroup` (`id`))
IDataSet fullDataSet = new FilteredDataSet(new DatabaseSequenceFilter(connection), connection.createDataSet());
<dataset>
  <administrable/>
  <usergroup/>
  <serviceuser/>
</dataset>