fjun0910的专栏

鉴于止水,修己以敬。

解决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端都删除。

阅读更多
上一篇ie8 无法在此处设置断点 该文档
下一篇创建新类时自动生成注释
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭