-
级联删除时报错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个答案 按时间排序 按投票排序
-
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.html2010年1月20日 14:55
相关推荐
如果,现在有两张表A(id,xx.xx...),C(id,Cid,xx,xx...),预实现C中的id与A 中id级联删除、级联更新/数据同步,可有两种实现方式: 一. 利用sql server自带的级联删除、级联更新功能,即其外键约束途径 alter table ...
hibernate many-to-many级联保存,级联更新,级联删除
mysql级联更新和级联删除,区分有级联和没级联操作的区别之处
SQL server创建触发器实现级联删除
qt下的sqlite3实现级联删除,在vs2010 + qt5.40 + win7下编译通过
MSserver自关联表的级联删除,使用触发器对自关联树形结构的表进行级联删除,文有几点教训,有编写脚本的初衷。
联系通过写存储过程进行级联删除,在实际开发中总结的
在数据库MySQL中利用外键实现级联删除、更新等方面的内容。有兴趣可以看看。。
级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单
有学院表(id,name)、学生表(id,schid,stuname)。当删除学院时,该学院下的学生自动删除。当更新学院时,学生表自动更新。
级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单...
JSP级联效果JSP级联效果JSP级联效果JSP级联效果JSP级联效果JSP级联效果JSP级联效果JSP级联效果JSP级联效果JSP级联效果
菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联
iBATIS 级联iBATIS 级联iBATIS 级联
级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单
级联菜单 动态级联菜单 可能动态取数据
jsp实现级联菜单jsp实现级联菜单jsp实现级联菜单jsp实现级联菜单jsp实现级联菜单
级联的操作有级联更新,级联删除。 二、级联相应的操作 在启用一个级联更新选项后,就可在存在相匹配的外键值的前提下更改一个主键值。系统会相应地更新所有匹配的外键值。如果在表A中将姓名为王五的记录改为李四,...
SQL 级联删除与级联更新的方法,需要的朋友可以参考一下
c#级联日期c#级联日期c#级联日期c#级联日期