hibernate не удаляет дочерний элемент с именованным запросом, но удаляет с помощью session.delete () - PullRequest
4 голосов
/ 25 ноября 2010

Я не специалист по hibernate, как указано в теме, у меня есть объект с коллекцией объектов в нем.Я попытался использовать

session.delete(myObject) 

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

Однако, когда я запускаю простой именованный запрос:

<query name="deleteByID">
    DELETE FROM MyObject o WHERE o.objId IN (:objIds)
</query>

И затем в коде

Query deleteQuery = s.getNamedQuery("deleteByID");
deleteQuery.setParameterList("objIds", objIds);
return deleteQuery.executeUpdate();

, но удаляется только основная сущность, в то время как дочерние элементы остаются в базе данных.Коллекция правильно помечена как удаленная сирота.Я хотел знать, почему такое поведение, и если это возможно, как добиться полного удаления с именованными запросами.

1 Ответ

4 голосов
/ 04 января 2011

Это известная проблема, hibernate не выполняет каскадное удаление через HQL.Если вы загружаете объект и удаляете его, используя session.delete(object);, то каскадные отношения соблюдаются.Не через HQL.У вас есть один из 3 вариантов.

  • Загрузите их и вызовите session.delete();
  • Загрузите все дочерние элементы через HQL, удалите их и затем реальные объекты.
  • Поставить каскадную ссылку на уровне базы данных.Поэтому, когда вы удалите его, об этом позаботится БД.

Подробнее читайте здесь: https://forum.hibernate.org/viewtopic.php?f=1&t=944722&start=0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...