Tôi hỏi và trả lời câu hỏi này để tham khảo trong tương lai, bởi vì tôi nghĩ rằng tôi đã tìm thấy một giải pháp tốt cho một vấn đề chung với DbUnit. Tôi hy vọng nó giúp một ai đó, một nơi nào đó xuống dòng.DbUnit không làm sạch chèn: ràng buộc khóa ngoài
Tôi đang sử dụng DbUnit 2.5.0
và TestNG 6.8.8
. Trường hợp sử dụng của tôi là một phần của cơ sở dữ liệu bao gồm 3 thực thể. Có ServiceUser
chứa khóa ngoài cho cả số Administrable
và UserGroup
.
Tôi đi theo hầu hết các mã ví dụ từ 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();
}
}
Kết quả của việc này là sau XMLDataSet
(dữ liệu bỏ qua):
<dataset>
<administrable/>
<serviceuser/>
<usergroup/>
</dataset>
Khi TestNG
thực thi @AfterMethod
, tôi nhận được sau Ngoại lệ:
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`))
Bạn đã đặt đoạn mã ở đâu? –
Tôi không chắc chắn những gì bạn đang yêu cầu. Tôi không nói bất cứ điều gì về một đoạn mã, và tất cả các mã có liên quan có sẵn trong một trong hai câu hỏi hoặc câu trả lời. – blagae
Đoạn mã IDataSet bạn đang sử dụng. Trong tập tin nào bạn đã đặt nó? –