项目场景:
报错如下
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);
}
解决JPA主键更新异常问题

博客内容涉及了一个在Java项目中使用JPA时遇到的异常:identifierofaninstance...。问题在于尝试更新一个实体的主键,这是不被允许的。解决方案是在复制实体属性之前,先将关联实体设为null,然后设置主键为空,再进行保存操作,从而避免主键更新的错误。
3162

被折叠的 条评论
为什么被折叠?



