简单地从相关实体集合中删除实体,不会删除数据库记录,对吗?
例如:
currentUser.getBooks().remove(thisBook);
userDAO.update(currentUser);
不会从数据库中删除记录
我是否必须始终明确转到bookDA并每次都说session.delete(thisBook)
?我认为Hibernate比那更智能,并且在保存或更新父实体时进行级联检查。
如何解决此问题?
答案 0 :(得分:5)
从实体Book
中的books
集合中删除实体User
只会删除两个实体(Book
和User
)之间的关系,而不是{ {1}}实体实例。
Book
子句也不是你想要的。级联意味着如果CASCADE
具有User
,即books
个实例的集合,则当您删除Book
实例时,也会删除图书实例。
因此,请阅读User
从此集合中删除此书,而不是从数据库中删除 。
是的,如果你想删除这本书,你必须使用getBooks().remove(thisBook)
(或DAO中的设施)。
答案 1 :(得分:2)
您需要在关系中指定级联类型。
这里的例子: http://www.mkyong.com/hibernate/hibernate-cascade-example-save-update-delete-and-delete-orphan/
答案 2 :(得分:0)
这一切都取决于您在图书集上定义的级联属性。