Hibernate异常Found shared references的解决办法

阅读更多
在项目中的续签模块中,由于在谈判成功后要新建一份合同,并要将原合同中的站点信息设置到新合同中去,在合同的Entity中有一个list<站点>来关联的,一份合同可以有多少站点!

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


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

你可能感兴趣的:(hibernate,entity)