10,606
社区成员
发帖
与我相关
我的任务
分享
public void copyPriceRuleEntitys(String[] ids) throws IllegalAccessException, InvocationTargetException {
/**
* 复制的时候,BeanUtils.copyPropertis是浅拷贝,导致两个对象引用的set是同一个,
* 那就导致出现多个引用异常,set属性里面没有任何东西是空集合而不是null
* 解决:设置set属性为null,
* 在拷贝后,新建一个集合,将原来的集合元素添加进去,并赋值给新拷贝的实体
*/
try {
MailingWayPriceItemEntity sourcePriceEntity = null;
MailingWayPriceItemEntity copyPriceEntity = null;
for(String id : ids){
sourcePriceEntity = mailingWayPriceItemDAO.find(id);
copyPriceEntity = new MailingWayPriceItemEntity();
BeanUtils.copyProperties(copyPriceEntity, sourcePriceEntity);
copyPriceEntity.setId(null);//主键id必须设置为null,否则不能执行insert语句
Set<MailingWayIncreaseEntity> increase = sourcePriceEntity.getIncrease();
//copyPriceEntity.setIncrease(null);
if(null!=increase && !increase.isEmpty()){
Set<MailingWayIncreaseEntity> newIncrease = new HashSet<MailingWayIncreaseEntity>(increase.size());//新建一个集合对象,防止共享
//BeanUtils.copyProperties(newIncrease, increase);
for(MailingWayIncreaseEntity inc : increase){
newIncrease.add(inc);
}
copyPriceEntity.setIncrease(newIncrease);
}
Set<MailingWayLinkEntity> mailingWayLink = sourcePriceEntity.getMailingWayLink();
//copyPriceEntity.setMailingWayLink(null);
if(null!=mailingWayLink&&!mailingWayLink.isEmpty()){
Set<MailingWayLinkEntity> newMailingWayLink = new HashSet<MailingWayLinkEntity>(mailingWayLink.size());
//BeanUtils.copyProperties(newMailingWayLink, mailingWayLink);
for(MailingWayLinkEntity mlk:mailingWayLink){
newMailingWayLink.add(mlk);
}
copyPriceEntity.setMailingWayLink(newMailingWayLink);
}
copyPriceEntity.setRemark(sourcePriceEntity.getRemark()+"_副本");
mailingWayPriceItemDAO.create(copyPriceEntity);//这里调用了创建对象的方法
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}