Согласно DBUnit docs ссылка должна поддерживать CLEAN_INSERT при использовании DatabaseSequenceFilter.
Я получаю следующее исключение при попытке этого
com.sybase.jdbc2.jdbc.SybSQLException: Dependent foreign key constraint violation in a referential integrity constraint. dbname = 'my_db', table name = 'tbl_child', constraint name = 'fk_tbl_child_parentid'.
Мои таблицы выглядят так:
CREATE TABLE dbo.tbl_parent
(
parent_id numeric(19,0) IDENTITY,
...
)
CREATE TABLE dbo.tbl_child
(
child_id numeric(19,0) IDENTITY,
parent_id numeric(19,0) NOT NULL,
...
)
ALTER TABLE dbo.tbl_child
ADD CONSTRAINT fk_tbl_child_parentid
FOREIGN KEY (parent_id)
REFERENCES dbo.tbl_parent (parent_id)
И мой набор данных DBUnit выглядит так:
<dataset>
<tbl_parent parent_id="41" ... />
<tbl_child child_id="1361" parent_id="41"/>
</dataset>
Таким образом, в моем тестовом классе, где у меня есть этот код, я получаю сообщение об ошибке, если данные уже существуют в базе данных и их нельзя удалить из-за ограничений внешнего ключа
@Before
public void setUp() throws Exception {
InsertIdentityOperation.CLEAN_INSERT.execute(getConnection(), getDataSet());
}
Интересно, что обходной путь - использовать REFRESH вместо CLEAN_INSERT, но это далеко не идеально, поскольку нежелательные данные могут находиться в базе данных, вызывая побочные эффекты:
@Before
public void setUp() throws Exception {
InsertIdentityOperation.REFRESH.execute(getConnection(), getDataSet());
}
Кто-нибудь смог заставить этот CLEAN_INSERT работать с Sybase и внешними ключами? Из прочтения других постов аналогичные проблемы существуют для MySQL, поэтому, возможно, здесь есть общая проблема (или я чего-то не понимаю)
[EDIT]
Теперь я добавил свой собственный обходной путь после повторного появления той же проблемы.
Я использую Sybase ASE 15 + DBUnit 2.4.8