Моделирование триггера с помощью dbUnit

Я использую dbUnit для размещения тестовых данных в БД с набором данных, например

     <dataset>
        <TABLE_1 PRIMARY_KEY_COL="10000001" OTHER_COL="Some Text"/>
     </dataset>

Моя проблема в том, что в db есть триггер при вставке, который заполняет дочерние записи в TABLE_2. Поэтому, когда я пытаюсь

   DatabaseOperation.DELETE.execute();

в tearDown() происходит сбой с java.sql.SQLException: ORA-02292: нарушено ограничение целостности (TABLE

   DatabaseOperation.DELETE.execute();
TABLE
     <dataset>
        <TABLE_1 PRIMARY_KEY_COL="10000001" OTHER_COL="Some Text"/>
     </dataset>
FK) — найдена дочерняя запись.

Есть ли способ смоделировать триггер при удалении для TABLE_1, чтобы удалить дочерние записи с помощью dbUnit и не добавлять триггер в БД?


person Chizh    schedule 05.09.2011    source источник


Ответы (2)


У нас нет триггеров в наших базах данных, но мы используем dbunit, и это может сработать для вас:

У вас может быть другой набор данных для операции DELETE, который включает таблицу, в которую триггер вставляет данные. Порядок важен, поэтому dbunit может выполнить операцию удаления или вставки в таблице, которая сначала ссылается на TABLE_1...

<dataset>
    <TABLE_WITH_TRIGGERED_DATA_HERE...>
    <TABLE_1 PRIMARY_KEY_COL="10000001" OTHER_COL="Some Text"/>
 </dataset>
person c_maker    schedule 05.09.2011

Я просто поставил две ссылки здесь, их должно быть достаточно

http://www.dbunit.org/apidocs/org/dbunit/operation/TruncateTableOperation.html

http://www.dbunit.org/bestpractices.html#nocleanup

person bpgergo    schedule 05.09.2011
comment
TRUNCATE не решает проблему: мы не можем усекать таблицы с зависимыми внешними ключами. - person APC; 05.09.2011
comment
Да, тогда, возможно, DeleteAllOperation сделает dbunit.org/apidocs/org/dbunit /operation/DeleteAllOperation.html - person bpgergo; 05.09.2011