Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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 如何在SpringTestDBUnit中进行自定义数据库设置/拆卸?_Java_Sql_Spring_Dbunit_Spring Test - Fatal编程技术网

Java 如何在SpringTestDBUnit中进行自定义数据库设置/拆卸?

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

我想知道如何创建自定义设置/拆卸,主要是为了解决cyclyc引用问题,在这里我可以使用Spring Test Dbunit插入自定义SQL命令


我是否可以使用注释,或者如何自定义注释?

Dbunit需要按顺序插入语句(xml行),因为它们是按顺序执行的。没有任何参数或注释,因此dbunit可以自动解析cyclyc引用或外键

如果您的数据集包含许多带有外键的表,那么我可以实现的最自动化的方法是:

  • 用少量记录填充数据库。在您的示例中: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数据,并修复所有循环引用


    在这里,我向您粘贴了:也可以查看一下。

    目前没有可以使用的注释,但是您可以创建
    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,我将对此进行研究,关于数据库的设计也很有趣。