我正在尝试从db获取一条记录,并与dto进行比较,以便进行审计。如果我找到一条记录,我会用更新的字段更新记录,并将主键id设置为null,然后尝试将其另存为新记录。如果在db中没有记录,我会将dto转换为实体并保存它。
List<AuditReconciliation> auditiedList = reconDao.getAuditedReconActionDtlList(Arrays.asList(entity.getReconActionDtlId()));
AuditReconciliation auditRecon = !auditiedList.isEmpty() ?auditiedList.get(0) : new AuditReconciliation();
if(!entity.getDisposition().equals(auditRecon.getDisposition())) {
auditRecon.setLastEditedDate(entity.getLastEditedDate()!= null? entity.getLastEditedDate():presentDate);
auditRecon.setReconActionDtlAuditId(null);
return auditRecon;
保存时获取org.hibernate.HibernateException:实例的标识符从1更改为null 2021-02-04 21:02:27.983错误14048 - io-8080-exec-24 o.s.t.i.TransactionInterceptor :应用程序异常被提交异常覆盖。任何帮助都将不胜感激。
发布于 2021-02-05 13:51:29
根据您的解释,将null设置为主键不会插入新记录,也不会将null更新为主键,从而导致错误(作为object is tied with persistence context
您的解决方案应该是什么
如果我找到记录,则为Scenario 1:
Solution 1:
尝试使用新字段更新同一记录,但不将主键设置为null。
Solution 2:
删除现有记录并插入新记录。
如果未找到记录,则返回Scenario 2:
Solution
:直接插入您提到的新记录。
https://stackoverflow.com/questions/66057176
复制相似问题