Удалить простую строку из базы данных - PullRequest
0 голосов
/ 02 мая 2018

У меня есть 2 таблицы, testInput и testCases, а в testInput у меня есть FK с идентификатором другой таблицы.

Таким образом, в основном строки, которые я хочу удалить, являются идентификатором ввода, идентификатором testCase, именем и описанием.

'43', '21', 'USERNAME', 'USERNAME'
'44', '21', 'PASSWORD', 'PASSWORD'

Я попытался удалить эту строку, и я получил

java.sql.SQLIntegrityConstraintViolationException: невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не выполнено (mydb. testInput, ОГРАНИЧЕНИЕ fk02 ИНОСТРАННЫЙ КЛЮЧ (testCase) ССЫЛКИ testCases (idtestCase) НА УДАЛИТЬ НЕТ ДЕЙСТВИЯ НА ОБНОВЛЕНИЕ НЕТ ДЕЙСТВИЯ)

Я не хочу удалять запись testCase. Я просто хочу удалить входные данные этого testCase. Что мне делать?

код, если хочешь ...

  List<TestInput> previousInputs = TestInput.getInputs(testCaseName);
        for(TestInput in : previousInputs) {
            Database.deleteObject(in);
        }



 //delete the object to the database
public static void deleteObject(Object object) {
    SessionFactory factory = HibernateUtil.getSessionFactory();
    Session session = factory.openSession();
    Transaction tx = null;
    try{
        tx = session.beginTransaction();
        session.delete(object);
        tx.commit();
    }catch (HibernateException e) {
        if (tx!=null) tx.rollback();
        e.printStackTrace();
    }finally {
        session.close();
    }
}

xml TestCases

   <hibernate-mapping>
<class name="TestCase" table="testCases">
    <meta attribute="class-description">
        This class contains the testCases details.
    </meta>
    <id name="id" type="int" column="idtestCase">
        <generator class="native"/>
    </id>
    <property name="name" column="name" type="string"/>
    <many-to-one name="type" class="TestType" column="type" fetch="select" lazy="false"/>
    <property name="data" column="data" type="binary"/>
    <property name="amountOfInputs" column="amountOfInputs" type="int"/>
    <property name="creationDate" column="creationDate" type="string"/>
    <property name="createdBy" column="createdBy" type="string"/>
    <many-to-one name="tellerConfig" class="TellerConfiguration" column="tellerConfig" fetch="select" lazy="false"/>
</class>
</hibernate-mapping>

xml testInput

<hibernate-mapping>
<class name="TestInput" table="testInput">
    <meta attribute="class-description">
        This class contains the testCases input details.
    </meta>
    <id name="id" type="int" column="idtestInput">
        <generator class="native"/>
    </id>
    <property name="name" column="name" type="string"/>
    <property name="description" column="description" type="string"/>
    <many-to-one name="testCase" class="TestCase" column="testCase" fetch="select" cascade="all" lazy="false" />
</class>

1 Ответ

0 голосов
/ 02 мая 2018

Измените ограничение для внешнего ключа fk02 с «НЕТ ДЕЙСТВИЯ» на «УСТАНОВИТЬ НУЛЬ»

FOREIGN KEY (idtestcase)
REFERENCES testCases(idtestCase)
ON DELETE SET NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...