我正在尝试从 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 ERROR 14048 --- [io-8080-exec-24] ostiTransactionInterceptor : 应用程序异常被提交异常覆盖。 任何帮助将不胜感激。
答案 0 :(得分:0)
根据您的解释,将 null 设置为主键不会插入新记录,也不会将 null 更新到主键从而导致错误,如 object is tied with persistence context
你的解决方案应该是什么
Scenario 1:
如果我找到了记录
Solution 1:
尝试使用新字段更新同一条记录,而不将主键设置为 null。
Solution 2:
删除现有记录并插入新记录。
Scenario 2:
如果没有找到记录
Solution
:如您所言,直接插入新记录。