当我尝试在 SQL Server 中测试 crud 操作时,我遇到了一个非常令人沮丧的问题。 请注意,我使用的是 hibernate、dbunit、ms sql server2008r2 和 jpa 的组合。
因此,正如我之前提到的,我尝试使用 dbunit 来测试 CRUD 操作。根据 dbunit 的文档,我创建了一个 XML 文件,其中包含必要的记录和另一个文件,以便在操作结束时进行比较。 在我的例子中,初始 xml 仅包含两行,它们也代表我的实体之间的关系。 初始xml
<xml>
<A id="1" name="nameA"/>
<B id="1" name="nameB" A_id="1">
</xml>
预期结果
<xml>
<A id="1" name="nameA"/>
<B id="1" name="nameB" A_id="1">
<B id="2" name="nameBB" A_id="1">
</xml>
注意我们只设置了clean insert策略下的setup操作,而teardown操作没有定义,默认是none。
因此,当我尝试在表 b 中插入另一条引用表 A 的记录时,如果数据库是干净的,则一切正常。然而,每次我们尝试重新执行相同的测试时,它都会由于违反外键约束而出错。 理论上,dbunit 每次插入从 xml 中检索的数据时,都应该(遵循干净插入策略)以相反的顺序删除,然后插入记录。 但是,如前所述,它并没有删除指示外键违规的记录,这让我认为反向顺序并没有真正起作用。
有什么想法吗? 提前tnx
最佳答案
三个想法:
ONE:也许你应该关闭标签“B”:
<B id="1" name="nameB" A_id="1">
应该是(最后缺少“/”)
<B id="1" name="nameB" A_id="1"/>
二:您可以检查您的应用程序是否没有在其他表中添加行。例如C 引用 B 或 A
三:可以查看是否有未结交易
关于Java dbUnit CRUD 测试错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14501434/