项目场景:
报错如下
identifier of an instance of com.pcitc.swm.pm.SolidWasteStorRec was altered from 4 to null; nested exception is org.hibernate.HibernateException: identifier of an instance of com.pcitc.swm.pm.SolidWasteStorRec was altered from 4 to null
问题描述:
SolidWasteStorRec solidWasteStorRecOut = storPointSWPrcDeta.getSolidWasteStorRecIn();
StorPointInitialStock storPointInitialStock = storPointSWPrcDeta.getStorPointInitialStock();
SolidWasteStorRec solidWasteStorRecOutResult = null;
if (solidWasteStorRecOut !=null){
SolidWasteStorRec solidWasteStorRec1 = new SolidWasteStorRec();
solidWasteStorRecOut.setSolidWasteStorRecId(null);
EPBeanUtils.copyProperties(solidWasteStorRecOut,solidWasteStorRec1);
solidWasteStorRec1.setWeight(storPointSWPrcDeta.getFactPrcQty());
solidWasteStorRec1.setStorType(SWMEnum.StorTypeEnum.exWarehouse.getIndex());
solidWasteStorRec1.setCrtTime(new Date());
solidWasteStorRec1.setCrtUserCode(new UserContextUtil().getUserId());
solidWasteStorRec1.setCrtUserName(new UserContextUtil().getUserName());
solidWasteStorRec1.setOutOrInTime(new Date());
solidWasteStorRecOutResult = solidWasteStorRecRepository.saveAndFlush(solidWasteStorRecOut);
}
原因分析:
JPA :这个错误是由于在一个事务中更新了主键,而主键是不能被更新的.
解决方案:
再copy之前先赋值(把关联表也的entity也设为null),然后再把主键设置为空再保存
SolidWasteStorRec solidWasteStorRecOut = storPointSWPrcDeta.getSolidWasteStorRecIn();
StorPointInitialStock storPointInitialStock = storPointSWPrcDeta.getStorPointInitialStock();
SolidWasteStorRec solidWasteStorRecOutResult = null;
if (solidWasteStorRecOut !=null){
SolidWasteStorRec solidWasteStorRec1 = new SolidWasteStorRec();
solidWasteStorRecOut.setCompanyHazaWaste(null);
solidWasteStorRecOut.setCommonSolidWaste(null);
solidWasteStorRecOut.setSolidWasteApply(null);
solidWasteStorRecOut.setHazaWasteDtl(null);
solidWasteStorRecOut.setPoltSource(null);
solidWasteStorRecOut.setSwTempStorEqp(null);
solidWasteStorRecOut.setWeight(storPointSWPrcDeta.getFactPrcQty());
solidWasteStorRecOut.setStorType(SWMEnum.StorTypeEnum.exWarehouse.getIndex());
solidWasteStorRecOut.setCrtTime(new Date());
solidWasteStorRecOut.setCrtUserCode(new UserContextUtil().getUserId());
solidWasteStorRecOut.setCrtUserName(new UserContextUtil().getUserName());
solidWasteStorRec1.setOutOrInTime(new Date());
EPBeanUtils.copyProperties(solidWasteStorRecOut,solidWasteStorRec1);
solidWasteStorRec1.setSolidWasteStorRecId(null);
solidWasteStorRecOutResult = solidWasteStorRecRepository.saveAndFlush(solidWasteStorRec1);
}