Hibernate异常Found shared references的解决办法

解决Hibernate共享引用集合异常
在合同续签模块中,因需将旧合同的站点信息复制到新合同中导致Hibernate抛出共享引用集合异常。通过创建新的集合并添加原有元素的方式解决了此问题。
部署运行你感兴趣的模型镜像
在项目中的续签模块中,由于在谈判成功后要新建一份合同,并要将原合同中的站点信息设置到新合同中去,在合同的Entity中有一个list<站点>来关联的,一份合同可以有多少站点!

在新增合同的代码如下:

RenewalItem item = renewalItemDao.findById(id);
PropertyContract pc = item.getPropertyContract();//旧合同
PropertyContract newPc = new PropertyContract();//新合同
List<BSProperty> bsList = pc.getBsProperty();
if(null!=bsList && !bsList.isEmpty()){
newPc.setBsProperty(bsList);//将旧合同中的关联站点设置到新合同中去。
}
....
renewalItemDao.merge(item);


此时会报:org.hibernate.HibernateException: Found shared references to a collection,这样的异常信息,意思是指发现共享引用集合,经过上网GOOGLE,有一帖子说:

解决方法:

在拷贝后,新建一个集合,将原来的集合元素添加进去,并赋值给新拷贝的实体


故将代码更改为:


RenewalItem item = renewalItemDao.findById(id);
PropertyContract pc = item.getPropertyContract();//旧合同
PropertyContract newPc = new PropertyContract();//新合同
List<BSProperty> bsList = pc.getBsProperty();
if(null!=bsList && !bsList.isEmpty()){
List<BSProperty> newBsList = new ArrayList<BSProperty>(bsList.size());
for(BSProperty bs : bsList){
newBsList.add(bs);
}
newPc.setBsProperty(newBsList);//将旧合同中的关联站点设置到新合同中去。
}
....
renewalItemDao.merge(item);


重新运行一次,问题解决了!!!

您可能感兴趣的与本文相关的镜像

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值