Я столкнулся с точно такой же проблемой, пытаясь проверить мой DAO с плоским набором данных xml.Конфигурация DBunit + HSQLDB 2.2.8 + JUnit4 + Spring + JPA-> все вместе приводит к
java.sql.SQLIntegrityConstraintViolationException: integrity constraint violation: foreign key no parent; FK13EE6CE6F09A6AAC table: ****
Я нашел хороший обходной путь, реализовав слушателя, расширяющего AbstractTestExecutionListener
.Вы должны указать тип действия, которое будет выполняться перед каждым тестом, в нашем случае отключение ограничений внешнего ключа. ПРИМЕЧАНИЕ: синтаксис может отличаться в зависимости от используемой версии HSQLDB.
public class ForeignKeyDisabling extends AbstractTestExecutionListener {
@Override
public void beforeTestClass(TestContext testContext) throws Exception {
IDatabaseConnection dbConn = new DatabaseDataSourceConnection(
testContext.getApplicationContext().getBean(DataSource.class)
);
dbConn.getConnection().prepareStatement("SET DATABASE REFERENTIAL INTEGRITY FALSE").execute();
}
}
Затем вам нужно только добавить этот прослушиватель в коллекцию, уже имеющуюся в ваших тестах:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"applicationContext-test.xml"})
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, DataSetTestExecutionListener.class, ForeignKeyDisabling.class})