4

Я пытаюсь выполнить каскадное удаление строк в таблице соединений через один из его внешних ключей, и у него есть другая связанная с ним таблица, которая также хотела бы удалить все строки, связанные с этим идентификатором. Таким образом, это выглядит как диаграмма ниже. Когда я использую Session.delete (reqCandObject) с hibernate, он отлично работает и каскадирует, удаляя одну запись из таблицы кандидат_jobReq, ​​а также связанные с ней комментарии. Тем не менее, я хочу удалить все записи из записей кандидата_jobReq, ​​которые имеют определенный идентификатор кандидата (а также удалить комментарии). Я попробовал функцию ниже, но в отличие от функции nice hibernate.delete (object), она запускается в внешний ключ ошибка ограничения. Как удалить эти строки при спящем режиме каскадировать удаление для меня?«Удалить где» каскадное удаление в спящем режиме?

enter image description here

public void deleteWhere(String selectionCase){ 
    Session hibernateSession = this.getSession(); 
    try { 
     hibernateSession.beginTransaction(); 
     Query q = hibernateSession.createQuery("delete "+ type.getSimpleName() +" where " + selectionCase); 
     q.executeUpdate(); 
     hibernateSession.getTransaction().commit(); 
    } finally { 
     hibernateSession.close(); 
    } 
} 

ответ

4

Hibernate обрабатывает каскады внутри. Выполнение запроса delete не вызовет внутренних каскадов, что приведет к несогласованности/сиротам. Это вы, возможно, попытались и столкнулись с ошибкой ограничения внешнего ключа.

Есть два способа удаления списка лиц, а также их дочерних организаций:

  1. Выберите список объектов, использующих selectionCase. Перейдите по списку и удалите каждый из них по отдельности, используя session.delete.
  2. Удалить записи вручную. Напишите отдельные операторы delete. Чтобы избежать нарушения ограничений внешнего ключа, вам необходимо удалить дочерние записи перед удалением родителей. Это будет работать лучше, чем первый вариант.
+0

Я надеялся, что есть хороший, встроенный способ быстро справиться с этим делом, я думаю, нет: -/oh хорошо. Спасибо за информацию! –

+0

@AdamJames добро пожаловать. –

+0

они действительно должны улучшить это поведение! – Mitchapp

Смежные вопросы