JPA 保存失败和事务回滚

时间:2021-02-05 03:28:36

标签: java sql oracle hibernate jpa

我正在尝试从 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 : 应用程序异常被提交异常覆盖。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

根据您的解释,将 null 设置为主键不会插入新记录,也不会将 null 更新到主键从而导致错误,如 object is tied with persistence context

你的解决方案应该是什么
Scenario 1: 如果我找到了记录

<块引用>

Solution 1: 尝试使用新字段更新同一条记录,而不将主键设置为 null。
Solution 2: 删除现有记录并插入新记录。

Scenario 2: 如果没有找到记录

<块引用>

Solution:如您所言,直接插入新记录。