0 0

级联删除时报错5

删除失败!原因:org.springframework.dao.InvalidDataAccessApiUsageException: deleted object would be re-saved by cascade (remove deleted object from associations): [com.eccl.orm.SysDepartment#1033]; nested exception is org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [com.eccl.orm.SysDepartment#1033]

对象:部门(SysDepartment) 公司(SysCompany)
部门和公司都包括一对多自关联
同时 部门和公司间通过外键关联 (多对一双向关联)
所有关系的cascad=“all”
描述1:删除某一父公司时,级联删除子公司 及 父、子公司下所有部门, 成功!
描述2:删除某一最低层子公司时,级联删除其下所有部门,成功!
描述3:删除某一父部门时,级联删除子部门,失败!!!!!!失败原因如上。
描述4:删除某一最底层子部门时,成功!

源码如下:
    public SysDepartment deleteSysDepartment(final SysDepartment childrenSysDepartment) {
        childrenSysDepartment.getSysCompany().getSysDepartments().remove(childrenSysDepartment);
   
        if (childrenSysDepartment.getParentSysDepartment()!=null) {
            childrenSysDepartment.getParentSysDepartment().getChildrenSysDepartment().remove(childrenSysDepartment);
        }
        getHibernateTemplate().delete(childrenSysDepartment);
       
        return childrenSysDepartment;
    }

上网查了解决方案,但还是不行。希望各位帮忙,谢谢!

2010年1月20日 11:55

3个答案 按时间排序 按投票排序

0 0

在数据表里把级联更新相关字段和级联删除相关字段选中
去掉Cascade试试

2010年1月21日 14:53
0 0

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



参考文章例子
http://www.blogjava.net/crazycy/archive/2006/06/24/54939.html

2010年1月20日 14:55
0 0

能不能把你的hbm.xml文件贴一下行吗?

2010年1月20日 13:39

相关推荐

Global site tag (gtag.js) - Google Analytics