解决办法:
方法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);