Удалить простую строку из базы данных

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

Итак, в основном строки, которые я хочу удалить, - это идентификатор ввода, идентификатор testCase, имя и описание.

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

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

java.sql.SQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (mydb.testInput, CONSTRAINT fk02 FOREIGN KEY (testCase) REFERENCES testCases (idtestCase) ON DELETE NO ACTION ON UPDATE NO ACTION)

Я не хочу удалять запись 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>

Ваши сопоставленные классы также могут быть полезны

HBo 02.05.2018 11:06

Отредактирую ....

user9729328 02.05.2018 11:08

попробуйте удалить cascade=all из вашего manyToOne и заменить его каждым «полезным» для вас (сохранить, объединить, обновить, ...)

HBo 02.05.2018 11:10

Я почти уверен, что вам нужно решить эту проблему на уровне базы данных, изменив способ определения внешнего ключа fk02, то есть заменив «ON DELETE NO ACTION» на что-то более подходящее.

Joakim Danielson 02.05.2018 12:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
53
1

Ответы 1

Измените ограничение внешнего ключа fk02 с «NO ACTION» на «SET NULL».

FOREIGN KEY (idtestcase)
REFERENCES testCases(idtestCase)
ON DELETE SET NULL

Другие вопросы по теме