解決hibernate 刪除異常:deleted object would be re-saved by cascade

在hibernate 刪除關聯時會出現eleted object would be re-saved by cascade (remove deleted object from associations)的異常,結合別人的和自己的經驗通常有三種解決的方案:

方法1 刪除Set方的cascade:
方法2 解決關聯關係後,再刪除

    onside.getManys().remove(thisMany);   //在所關聯的一方的set中移走當前要刪除的對象
    thisMany.setOne(null);                          //設置所對應的一方爲空,解除它們之間的關係
    manyDao.delete(thisMany);
方法3 在many-to-one方增加cascade 但值不能是none
 


主要講講要點(以OneToMany爲例):

1.如果Many端存在於One端的集合中,直接刪除Many,就會拋出"deleted object would be re-saved by cascade"的異常,解決辦法是在One端的集合中先刪除Many端(先把他們之間的聯繫割斷),然後再在Hibernate中刪除Many端。
但在JDBC下直接刪除Many端是可以的。

2.如果直接刪除One端:
   A.如果One端中沒有設置Cascade爲delete或者all,就會拋出“Cannot delete or update a parent row: a foreign key constraint fails”的異常。在JDBC下也是不行的(在建表時設置 ON DELETE CASCADE除外),因爲Hibernate只是把JDBC下的異常封裝而已。
   B.如果One端中設置Cascade爲delete或者all,刪除的時候就會把所有Many端都刪除。

發佈了80 篇原創文章 · 獲贊 4 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章