从集合中删除实体时,Hibernate不会删除DB记录

时间:2012-02-06 10:04:22

标签: java hibernate

简单地从相关实体集合中删除实体,不会删除数据库记录,对吗?

例如:

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

不会从数据库中删除记录

我是否必须始终明确转到bookDA并每次都说session.delete(thisBook)?我认为Hibernate比那更智能,并且在保存或更新父实体时进行级联检查。

如何解决此问题?

3 个答案:

答案 0 :(得分:5)

从实体Book中的books集合中删除实体User只会删除两个实体(BookUser)之间的关系,而不是{ {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)

这一切都取决于您在图书集上定义的级联属性。