Обходные пути для отсутствия поддержки удаления-сироты в Hibernate для отношений один-к-одному и многие-к-одному? - PullRequest
15 голосов
/ 27 мая 2009

Hibernate не поддерживает каскад «удаления-сироты» отношений один-к-одному или многие-к-одному. Я недавно обнаружил это, и это вызывает у меня серьезную головную боль. У меня есть пара классов в моей модели, которые были разработаны таким образом, чтобы у ребенка не было смысла реального мира вне родителя. У меня есть только один DAO для родителей, а не отдельный DAO для дочернего класса.

Это работает:

parent.getChild().setProperty("something");
parentDao.save(parent);

Это ничего не делает:

parent.setChild(null);
parentDao.save(parent);

Это очень прискорбно, потому что теперь я должен переосмыслить свой уровень DAO и некоторые операции моего уровня обслуживания.

Кто-нибудь обходил это ограничение элегантным способом? Я действительно хотел бы заниматься только сохранением родительских объектов. В этом конкретном случае нет причин иметь дело с устойчивостью детей, кроме как сделать Hibernate счастливым, и только в случае удаления детей.

Ответы [ 4 ]

4 голосов
/ 19 августа 2009

Кажется, это недостаток в рамках, на которые они МОГУТ обратиться, надеюсь, скоро

http://opensource.atlassian.com/projects/hibernate/browse/HHH-2608

Этот билет был открыт в 2007 году, а последнее сообщение с жалобой на проблему было совсем недавно, месяц назад.

То, что я делаю, это помещаю свойство в мой объект с именем isMarkedForDeletion. И если это возвращает true, мой дао или мой сервис делают явное удаление. Это определенно НЕ так хорошо, как удаление-сирота, но оно работает достаточно хорошо в рамках среды + гибернация.

Я буду следить за этим сообщением, поскольку это ОЧЕНЬ важный вопрос.

3 голосов
/ 16 марта 2010

Обход, описанный здесь https://forum.hibernate.org/viewtopic.php?p=2379216, работал для меня. Он использует ассоциацию @OneToMany с одним элементом на стороне «много» для реализации ассоциации @OneToOne и решения проблемы удаления сирот.

2 голосов
/ 05 ноября 2013

Эврика, исправлено в Hibernate 4.27 https://hibernate.atlassian.net/browse/HHH-6484 (не проверено)

0 голосов
/ 23 декабря 2010

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

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