Java 如何在SpringTestDBUnit中进行自定义数据库设置/拆卸?
我想知道如何创建自定义设置/拆卸,主要是为了解决cyclyc引用问题,在这里我可以使用Spring Test Dbunit插入自定义SQL命令Java 如何在SpringTestDBUnit中进行自定义数据库设置/拆卸?,java,sql,spring,dbunit,spring-test,Java,Sql,Spring,Dbunit,Spring Test,我想知道如何创建自定义设置/拆卸,主要是为了解决cyclyc引用问题,在这里我可以使用Spring Test Dbunit插入自定义SQL命令 我是否可以使用注释,或者如何自定义注释?Dbunit需要按顺序插入语句(xml行),因为它们是按顺序执行的。没有任何参数或注释,因此dbunit可以自动解析cyclyc引用或外键 如果您的数据集包含许多带有外键的表,那么我可以实现的最自动化的方法是: 用少量记录填充数据库。在您的示例中:Company,CompanyConfig并确保满足外键 使用dbu
我是否可以使用注释,或者如何自定义注释?Dbunit需要按顺序插入语句(xml行),因为它们是按顺序执行的。没有任何参数或注释,因此dbunit可以自动解析cyclyc引用或外键 如果您的数据集包含许多带有外键的表,那么我可以实现的最自动化的方法是:
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数据,并修复所有循环引用
在这里,我向您粘贴了:也可以查看一下。目前没有可以使用的注释,但是您可以创建
DbUnitTestExecutionListener
的子类,并在beforeTestMethod
中添加自定义逻辑。或者,您可以创建自己的TestExecutionListener
,然后在DbUnitTestExecutionListener
之前对其进行排序
另一个可能更好的解决方案是重新设计数据库以消除循环。您可能可以将引用从公司
删除到公司配置
,并在公司配置
表中为公司id
添加唯一索引:
+------------+ 1 0..1 +--------------------------------+
|公司|对不起,您需要解决什么问题?如果您重新表述它或将给出您的问题的示例?好的,假设您有一个数据库,其中有一个公司,该公司有一个指向CompanyConfig表的外键引用,该表同时包含指向公司id的外键引用,因此,为了创建条目,您首先必须输入一个具有空CompanyConfig id的公司,然后在创建公司和引用公司id外键的公司配置后,您可以将公司设置为您创建的CompanyConfig id。(我希望这是有意义的)因此可以在@Before方法中完成,但我想知道如何使用SpringTestDbUnit完成。是的,我知道我必须使用数据集,我的问题是如何使用注释(通过在两个操作中手动将公司配置id设置为null)优雅地解决循环引用插入和拆卸问题使用Spring Test DbUnit注释而不是手动解决方案,换句话说,我如何通过扩展Db unit的DBTestCase和重写@Before和After并同时使用Spring Test DbUnit框架来定制和拆除数据库?非常感谢Phil,我将对此进行研究,关于数据库的设计也很有趣。