在项目中的续签模块中,由于在谈判成功后要新建一份合同,并要将原合同中的站点信息设置到新合同中去,在合同的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);
重新运行一次,问题解决了!!!