2012-02-06 61 views
2

僅僅從一個相關實體集合中刪除一個實體不會刪除數據庫記錄,對嗎?當一個實體從一個集合中被刪除時,Hibernate不會刪除一個DB記錄

例如:

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

不會刪除從DB

記錄我必須總是明確地轉到bookDAO說每次session.delete(thisBook)?我儘管Hibernate比這更聰明,並且在父實體保存或更新時進行級聯檢查。

我該如何解決這個問題?

+1

您需要將orphanRemoval設置爲true。然後從集合中移除元素將從db – 2013-07-11 07:49:38

回答

5

在實體Userbooks收藏中移除實體Book只是刪除了兩個實體(BookUser),而不是Book實體實例之間的關係。

CASCADE子句也不是你要找的。級聯意味着如果User具有books,即Book實例的集合,則在刪除User實例時,也會刪除書籍實例。

所以,讀getBooks().remove(thisBook)從這個集合從數據庫中刪除這本書而不是

是的,如果你想刪除書,你必須使用session.remove(book)(或你在DAO設施)。

0

這一切都取決於您在書籍集合中定義的級聯屬性。

+0

中刪除它,它是DELETE,但我也嘗試了ALL。不起作用。 – preslavrachev 2012-02-06 10:15:40

相關問題