这个问题很久以前我遇见过,找到了解决办法,原出处已经忘了,文章如下:
比如我们现在有一个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
内部还是支持这个选项……
分享到:
相关推荐
hibernate many-to-many级联保存,级联更新,级联删除
深入理解hibernate many-to-one(多对一)及 cascade(级联).
纯JS---省份城市级联选择, (this);" style="width: 49%; float: left;"> ; float: right;"></select>
proteus仿真--四个595级联数码管显示静态时钟,带仿真图和程序工程图文件。
内部为四级的级联下拉框,分别为省份,市,县及区和镇及街道四级下拉框;(适用任何语言的纯HTML)详细截图可访问:https://blog.csdn.net/weixin_43972758/article/details/86510419 进行查询。
Haar-like + adaboost +级联 人脸检测算法代码,简洁的代码,已通过测试
第七章_Hibernate_-_级联策略 第七章
两套hibernate级联例子,jar包已经包含在里面了,运行代码也写好了,数据库直接会自动生成表的,就差你运行了,你懂的
Hibernate的级联操作(增,删,该)
大数据-算法-地图数据多尺度级联更新方法研究.pdf
bch(31,16)、CRC-32与交织码级联的实现及分析
行业分类-设备装置-基于级联方程的椭圆轨道航天器相对位置退步控制方法.zip
行业分类-电子-一种电池单体级联保护电路
行业-电子政务-具有级联二极管电路的升压电路和逆变器拓扑.zip
行业-电子政务-具有级联驱动器的开关式电容电路的预充电.zip
android读取xml资源实现省-市-区的级联选择 具体参考我的博客: http://blog.csdn.net/jiguangcanhen/article/details/41074703 改资源为ant架构,gradle架构,请下载之后自己用Eclipse导吧。
行业-电子政务-具有级联多级开关感容网络的单级电流型变换器.zip
行业资料-电子功用-基于模型设计的级联式五电平逆变系统
电子政务-主机智能控制的级联电磁除尘系统.zip
行业资料-电子功用-模块化H桥级联多电平电力电子变压器控制系统