Java 如何处理DBUnit中的双向关系?

Java 如何处理DBUnit中的双向关系?,java,foreign-keys,constraints,dbunit,Java,Foreign Keys,Constraints,Dbunit,我有两个实体,它们彼此有外键。当然,它们必须按特定顺序放入xml数据集中,以便其中一个不知道另一个。DBunit在分析第一个约束冲突时引发异常。如何处理?这是如此明显的情况,但我找不到任何解决办法!这样一件小事怎么办?这到底有可能吗 我正试图使用deferStatement来实现这一点,但即使我使用的数据库实现支持它,它也没有帮助 谢谢 DBUnit每插入一行使用一个事务,这很糟糕。可以对代码进行黑客攻击以避免这种情况,但是如果其中一个约束没有延迟,或者如果您不使用更新而不是插入,那么您仍然会遇

我有两个实体,它们彼此有外键。当然,它们必须按特定顺序放入xml数据集中,以便其中一个不知道另一个。DBunit在分析第一个约束冲突时引发异常。如何处理?这是如此明显的情况,但我找不到任何解决办法!这样一件小事怎么办?这到底有可能吗

我正试图使用deferStatement来实现这一点,但即使我使用的数据库实现支持它,它也没有帮助


谢谢

DBUnit每插入一行使用一个事务,这很糟糕。可以对代码进行黑客攻击以避免这种情况,但是如果其中一个约束没有延迟,或者如果您不使用更新而不是插入,那么您仍然会遇到鸡和蛋的问题。无耻的插件:改用DbSetup:如何延迟这些约束?感谢这个库,我将在下一个项目中试用它,我必须在这个项目中坚持使用DBUnit。这取决于您的数据库,以及它是否支持它们。有关Oracle,请参阅。我正在使用H2内存数据库。真遗憾,他们怎么能忘记这么明显的案子。。。?
@SuppressWarnings("resource")
    public void setupDB() throws DataSetException, DatabaseUnitException, SQLException, IOException {
        FlatXmlDataSetBuilder builder = new FlatXmlDataSetBuilder();

        builder.setColumnSensing(true);
        builder.setCaseSensitiveTableNames(true);

        final ApplicationContext appContext = new AnnotationConfigApplicationContext(PropertiesConfiguration.class,
                PersistenceConfiguration.class);
        DataSource dataSource = appContext.getBean(DataSource.class);

        Connection connection = dataSource.getConnection();
        Statement deferStatement = connection.createStatement();
        deferStatement.execute("SET CONSTRAINTS ALL DEFERRED");
        DatabaseConnection databaseConnection = new DatabaseConnection(connection);
        InputStream inputStream = new FileInputStream(inFile);
        DatabaseOperation.TRANSACTION(DatabaseOperation.CLEAN_INSERT).execute(databaseConnection,
                builder.build(inputStream));

        log.debug("Database initialized with data from dataset.");
    }