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