Hibernate не удаляет запись в БД при удалении объекта из коллекции - PullRequest
2 голосов
/ 06 февраля 2012

Простое удаление объекта из коллекции связанных объектов не приведет к удалению записи в базе данных, верно?

например:

currentUser.getBooks().remove(thisBook);
userDAO.update(currentUser);

не удалит запись из БД

Должен ли я всегда явно идти в bookDAO и каждый раз произносить session.delete(thisBook)? Я думаю, что Hibernate намного умнее и делает каскадные проверки, когда родительский объект сохраняется или обновляется.

Как мне решить эту проблему?

Ответы [ 3 ]

5 голосов
/ 06 февраля 2012

Удаление сущности Book из коллекции books в сущности User просто удаляет связь между двумя сущностями (Book и User), а не экземпляром Book сущности.

Предложение CASCADE также не то, что вы ищете.Каскадирование означает, что если User имеет books, то есть набор экземпляров Book, то при удалении экземпляра User также удаляются экземпляры книги.

Итак, прочитайте getBooks().remove(thisBook) как удалить эту книгу из этой коллекции , а не из базы данных .

И да, если вы хотите удалить книгу, вы должны использовать session.remove(book)(или объект в вашем DAO).

2 голосов
/ 06 февраля 2012

Вам необходимо указать тип каскада в ваших отношениях.

примеры здесь: http://www.mkyong.com/hibernate/hibernate-cascade-example-save-update-delete-and-delete-orphan/

0 голосов
/ 06 февраля 2012

Все зависит от атрибута каскада, который вы определили в своей коллекции книг.

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