由于缺少created_by,无法删除已审核的实体,否则可以正常工作

问题描述 投票:0回答:1

我正在使用带有 envers 和审计的 spring boot 3。 审核对于创建和编辑实体效果很好,但是对于删除实体,我收到以下错误:

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: 
org.springframework.dao.DataIntegrityViolationException: could not execute statement 
[ERROR: null value in column "created_by" of relation "price_item_aud" violates not-null constraint
Detail: Failing row contains (356, 2, 8ca32c7d-d087-49b9-be0a-1158bb105ff9, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null).] [insert into public.price_item_aud (revend,revend_tstmp,revtype,created_by,created_date,modified_by,modified_date,...,rev,id) values (?,?,?,?,?,...,?,?)]; SQL [insert into public.price_item_aud (revend,revend_tstmp,revtype,created_by,created_date,modified_by,modified_date,...,rev,id) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)]; constraint [created_by" of relation "price_item_aud]] with root cause

org.postgresql.util.PSQLException: ERROR: null value in column "created_by" of relation "price_item_aud" violates not-null constraint

创建或编辑同一实体时,

created_by
和所有其他字段均已正确填充,但
delete
上未填充。此外,删除时不会调用 AuditorAware。

我使用以下特殊配置:

        audit_strategy: "org.hibernate.envers.strategy.ValidityAuditStrategy"
        audit_strategy_validity_store_revend_timestamp: true

我尝试使用多种删除方法,但似乎都没有触发JPA审核。

在添加 JPA 审计之前删除也工作得很好,所以我认为这不是由于 Evers 设置造成的。由于 JPA 审计适用于创建和修改,并且

created_by
已正确填写在实体表和 _aud 表中,因此我会询问在哪里查看的任何进一步想法。

spring spring-data-jpa audit hibernate-envers
1个回答
0
投票

我发现here添加

spring:
  jpa:
    properties:
      org:
        hibernate:
          envers:
            store_data_at_delete: true

解决问题。

或者,我可以删除 JPA 审核字段的

NotNull
约束,但我认为这个解决方案在我的情况下更好,因为删除不是一个频繁的操作。

© www.soinside.com 2019 - 2024. All rights reserved.