1. 程式人生 > >解決hibernate 刪除異常: deleted object would be re-saved by cascade (remove deleted ob

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

解決辦法:

方法1 刪除Set方的cascade
方法2 解決關聯關係後,再刪除 :
方法3 在many-to-one方增加cascade 但值不能是none

以one-To-many為例:

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端都刪除。

其他參考:

在刪除的方法中加入這樣幾句程式碼就可以了

Orders od=(Orders)session.load(Orders.class,item.getOrderId());
od.getOrderItems().remove(item);