Don't dereference a collection with cascade="all-delete-orphan" ,这是14年遇到的问题,最近在博客上进行整理汇总
2016-10-31 10:06
661 查看
如我们现在有一个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还可更改hbm的配置 :
原来是
<set lazy="true" name="children" cascade="all-delete-orphan" inverse="true">
<key column="PARENT_ID"/>
<one-to-many class="Child"/>
</set>
修改为:
<set lazy="true" name="children" cascade="save-update,delete" 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还可更改hbm的配置 :
原来是
<set lazy="true" name="children" cascade="all-delete-orphan" inverse="true">
<key column="PARENT_ID"/>
<one-to-many class="Child"/>
</set>
修改为:
<set lazy="true" name="children" cascade="save-update,delete" inverse="true">
<key column="PARENT_ID"/>
<one-to-many class="Child"/>
</set>
测试通过!
另外,hibernate 3已经将cascade当中的选项做了修改,现在已经没有了all-delete-orphan这个选项,虽然hibernate
内部还是支持这个选项……
相关文章推荐
- HibernateException - A collection with cascade="all-delete-orphan" was no longer referenced by the o
- org.hibernate.HibernateException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance:
- org.hibernate.HibernateException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance:
- 卸载和安装LINUX上的JDK,14年遇到问题并解决的,最近在整理博客
- HIbernate级联删除(hibernate 双向一对多中 主表设置cascade="all-delete-orphan",在save时出现
- cascade="all-delete-orphan" 处理
- cascade="all-delete-orphan"时容易出现的一个异常
- hibernate cascade="all-delete-orphan"(所有-删除-孤儿)释疑
- cascade="all-delete-orphan" 处理
- 晕,hibernate 的 merge和cascade="all-delete-orphan"要慎重合在一起使用
- hibernate3的cascade导致deleted object would be re-saved by cascade与 A collection with cascade="all-dele
- VS2010无法调试问题解决 最近,因为公司开发的需要,对开发环境进行全面的升级,在这其中也遇到了不少问题,在之后将陆续整理出来,以便以后查看。 之前开发环境:VS2008,ArcGIS9.3,Ar
- Hibernate逍遥游记-第5章映射一对多-02双向(<set>、<key>、<one-to-many>、inverse、cascade="all-delete-orphan")
- cascade="all-delete-orphan"时容易出现的一个异常
- 晕,hibernate 的 merge和cascade="all-delete-orphan"要慎重合在一起使用
- delete和all-delete-orphan在进行删除操作时的不同
- 总结最近SVN更新时遇到的"<<<<<<< .mine“,>>>>>.的问题
- 最近这段时间开发过程中遇到的一些细节问题汇总
- 最新hexo3和Github搭建个人博客遇到问题和解决方法汇总!