我想知道如何创建自定义设置/拆卸主要用于修复cyclyc refence问题,我可以使用Spring Test Dbunit http://springtestdbunit.github.io/spring-test-dbunit/index.html插入自定义SQL命令。
是否有可以使用的注释或如何自定义?
答案 0 :(得分:0)
Dbunit需要按顺序插入语句(xml行),因为它们是按顺序执行的。没有或魔术参数或注释,因此dbunit可以自动解析您的cyclyc refences或外键。
如果您的数据集包含许多带有外键的表,那么我可以实现最自动化的方式:
使用少量记录填充数据库。在您的示例中:Company,CompanyConfig并确保满足外键。
使用dbunit导出工具提取数据库样本。
这是您可以使用的片段:
IDatabaseConnection connection = new DatabaseConnection(conn, schema);
configConnection((DatabaseConnection) connection);
// dependent tables database export: export table X and all tables that have a // PK which is a FK on X, in the right order for insertion
String[] depTableNames = TablesDependencyHelper.getAllDependentTables(connection, "company");
IDataSet depDataset = connection.createDataSet(depTableNames);
FlatXmlWriter datasetWriter = new FlatXmlWriter(new FileOutputStream("target/dependents.xml"));
datasetWriter.write(depDataset);
运行此代码后,您将在" dependents.xml"中设置dbunit数据,并修复所有周期参考。
我在这里粘贴了full code:还可以查看dbunit doc about how to export data。
答案 1 :(得分:0)
目前没有可以使用的注释,但您可以创建DbUnitTestExecutionListener
的子类并在beforeTestMethod
中添加自定义逻辑。或者,您可以创建自己的TestExecutionListener
并在DbUnitTestExecutionListener
之前订购它。
另一个可能更好的解决方案是重新设计数据库以消除循环。您可以将引用从company
删除到company_config
,并在company_id
表格中为company_config
添加唯一索引:
+------------+ 1 0..1 +--------------------------------+
| company |<---------| company_config |
+------------+ +--------------------------------+
| company_id | | config_id |
| ... | | company_id (fk, notnull, uniq) |
+------------+ +--------------------------------+
而不是查看company.config_id
来获取配置,而不是select * from company_config where company_id = :id
。