DbUnit의 공통적 인 문제에 대해 적절한 해결책을 찾았 기 때문에이 질문을 나중에 참조 할 때 묻고 답할 것입니다. 누군가가 어딘가에 도움이되기를 바랍니다.DbUnit이 클린 삽입하지 못함 : 외래 키 제약
나는 DbUnit 2.5.0
과 TestNG 6.8.8
을 사용하고 있습니다. 나의 유스 케이스는 3 개의 엔티티로 구성된 데이터베이스의 일부분이다. Administrable
및 UserGroup
에 대한 외래 키를 보유하는 ServiceUser
이 있습니다.
는 이런 결과는 XMLDataSet
(생략 된 데이터)에 따르는 http://city81.blogspot.com/2011/03/testing-jpa-entities-using-dbunit.html
public abstract class AbstractDatabaseTest {
protected EntityManager em; // initialized elsewhere
private IDatabaseConnection connection;
private IDataSet dataset;
@BeforeClass
private void setupDatabaseResource() throws Exception {
// using Hibernate
connection = new DatabaseConnection(((SessionImpl) (em.getDelegate())).connection());
connection.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new HsqldbDataTypeFactory());
// full database export
IDataSet fullDataSet = connection.createDataSet();
final String datasetPath = String.format("%s%s", RESOURCE_FOLDER, "Testing.xml");
FlatXmlDataSet.write(fullDataSet, new FileOutputStream(datasetPath));
FlatXmlDataSetBuilder flatXmlDataSetBuilder = new FlatXmlDataSetBuilder();
flatXmlDataSetBuilder.setColumnSensing(true);
dataset = flatXmlDataSetBuilder.build(new FileInputStream(datasetPath));
}
@AfterMethod
public void cleanDB() throws Exception {
em.getTransaction().begin();
DatabaseOperation.CLEAN_INSERT.execute(connection, dataset);
em.getTransaction().commit();
}
}
에서 코드 예의 대부분 따랐다
<dataset>
<administrable/>
<serviceuser/>
<usergroup/>
</dataset>
TestNG
가 @AfterMethod
을 실행하면, I는 다음을 얻을 예외 :
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException
Cannot delete or update a parent row: a foreign key constraint fails (`testing_db`.`serviceuser`, CONSTRAINT `FK_gyylcfbhpl2ukqs5rm7sq0uy8` FOREIGN KEY (`userGroup_id`) REFERENCES `usergroup` (`id`))
어디에서 코드 스 니펫을 넣었습니까? –
나는 당신이 무엇을 요구하고 있는지 잘 모르겠습니다. 코드 스 니펫에 대해서는 아무 것도 말하지 않고 모든 관련 코드는 질문 또는 답변에서 사용할 수 있습니다. – blagae
사용중인 코드 IDataSet 스 니펫. 그 파일은 어떤 파일에 있었습니까? –