Hibernate异常Found shared references的解决办法
程序员文章站
2022-03-02 13:50:55
...
在项目中的续签模块中,由于在谈判成功后要新建一份合同,并要将原合同中的站点信息设置到新合同中去,在合同的Entity中有一个list<站点>来关联的,一份合同可以有多少站点!
在新增合同的代码如下:
此时会报: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()){
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);
重新运行一次,问题解决了!!!
推荐阅读
-
Hibernate :Found shared references to a collection
-
Hibernate JPA —— could not insert 或 detach entity passed to persist 或Found shared references 错误
-
hibernate异常Found shared references to a collection
-
org.hibernate.HibernateException: Found shared references to a collection: com.jinyi.ihome.module.ex...
-
HibernateException: Found shared references to a collection 解决办法
-
Hibernate :Found shared references to a collection
-
Hibernate异常Found shared references的解决办法
-
hibernate查询时出现LazyInitializationException异常的解决办法