cascade="all-delete-orphan" 处理
2014-08-22 15:27
579 查看
比如我们现在有一个Parent的实体,在Parent实体当中有一个children的Set
由于这个children的数据并非非常重要,为了方便,我们在修改parent的时候,做法经常都是
1,清空children全部删了,再把新的children全部加进去。
今天早上做这一方面工作的时候遇到一个问题,就是在更新parent的时候,报了一个
Don't dereference a collection with cascade="all-delete-orphan"
的异常,经常一半个小时的查资料和调试,终于找到了解决问题的办法
刚刚开始我的做法为:
parent = parentService.findParentById(id);
parent.getChildren.clear();
parent.setChildren(newChildren);
parentService.updateparent(parent);
这样做一定会报出一个Don't dereference a collection with cascade="all-delete-orphan"的异常
原来是,对于parent的children这个Set,它本身是一个持久的集合,该集合存在于hibernate的对象池当中,通过
parent.setChildren(newChildren)的设置之后,本身已经将parent对children集合的引用指到对象池外的一个集合。
后来查询资料后的做法为:
parent = parentService.findParentById(id);
parent.getChildren.clear();
parent.getChildren.addAll(newChildren);
parentService.updateparent(parent);
做了几次测试,问题解决。
hbm配置如下:
<set lazy="true" name="children" cascade="all,delete-orphan" inverse="true">
<key column="PARENT_ID"/>
<one-to-many class="Child"/>
</set>
另外,hibernate 3已经将cascade当中的选项做了修改,现在已经没有了all-delete-orphan这个选项,虽然hibernate
内部还是支持这个选项……
由于这个children的数据并非非常重要,为了方便,我们在修改parent的时候,做法经常都是
1,清空children全部删了,再把新的children全部加进去。
今天早上做这一方面工作的时候遇到一个问题,就是在更新parent的时候,报了一个
Don't dereference a collection with cascade="all-delete-orphan"
的异常,经常一半个小时的查资料和调试,终于找到了解决问题的办法
刚刚开始我的做法为:
parent = parentService.findParentById(id);
parent.getChildren.clear();
parent.setChildren(newChildren);
parentService.updateparent(parent);
这样做一定会报出一个Don't dereference a collection with cascade="all-delete-orphan"的异常
原来是,对于parent的children这个Set,它本身是一个持久的集合,该集合存在于hibernate的对象池当中,通过
parent.setChildren(newChildren)的设置之后,本身已经将parent对children集合的引用指到对象池外的一个集合。
后来查询资料后的做法为:
parent = parentService.findParentById(id);
parent.getChildren.clear();
parent.getChildren.addAll(newChildren);
parentService.updateparent(parent);
做了几次测试,问题解决。
hbm配置如下:
<set lazy="true" name="children" cascade="all,delete-orphan" inverse="true">
<key column="PARENT_ID"/>
<one-to-many class="Child"/>
</set>
另外,hibernate 3已经将cascade当中的选项做了修改,现在已经没有了all-delete-orphan这个选项,虽然hibernate
内部还是支持这个选项……
相关文章推荐
- cascade="all-delete-orphan" 处理
- hibernate cascade="all-delete-orphan"(所有-删除-孤儿)释疑
- 晕,hibernate 的 merge和cascade="all-delete-orphan"要慎重合在一起使用
- HIbernate级联删除(hibernate 双向一对多中 主表设置cascade="all-delete-orphan",在save时出现
- cascade="all-delete-orphan"时容易出现的一个异常
- HibernateException - A collection with cascade="all-delete-orphan" was no longer referenced by the o
- cascade="all-delete-orphan"时容易出现的一个异常
- org.hibernate.HibernateException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance:
- 晕,hibernate 的 merge和cascade="all-delete-orphan"要慎重合在一起使用
- org.hibernate.HibernateException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance:
- Don't dereference a collection with cascade="all-delete-orphan" ,这是14年遇到的问题,最近在博客上进行整理汇总
- Hibernate逍遥游记-第5章映射一对多-02双向(<set>、<key>、<one-to-many>、inverse、cascade="all-delete-orphan")
- Hibernate中cascade为all-delete-orphan与all的区别
- hibernate cascade属性 all-delete-orphan
- hibernate3的cascade导致deleted object would be re-saved by cascade与 A collection with cascade="all-dele
- Hibernate5-1对多(1:n)-级联删除-cascade="delete-orphanl"
- 用Delphi7编写代码时出现"dcc70.dll"调用失败的处理方法
- ADO连接oracle数据"无法处理服务名"问题的处理!
- 打开一个VC工程提示"Not all of the windows in the workspace could be opened."
- Gridview中生成的属性rules="all",在Firefox出现内线框解决办法