Hibernate envers 不在 aud 中保存删除的数据 table

Hibernate envers doesnt save deleted data in aud table

我在 spring 启动时使用 hibernate envers 在 application.properties 文件

中有这些配置
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.org.hibernate.envers.store_data_at_delete=true
spring.jpa.properties.org.hibernate.envers.audit_table_suffix=_AUDIT

我正在从基础 table 中删除一些记录,审计 table 是在数据库中创建的,但删除的记录不会显示在审计 table 或修订 table 中。

我删除记录的方法是使用此方法:

 Query(value = "delete from basetable as a where a.first  <= :first and a.sev = :sev and a.id not in (select larm_id from roots as rca where larm_id = a.id)", nativeQuery = true)
    void delete(@Param("first") Long firstOccurrence, @Param("sev") int sev);

        repo.delete(1639835200L, 0);

我做错了什么?

您遇到的问题是您正在执行批量删除。

执行删除的查询理论上可以从数据库中删除 0、1 或多行,这样的查询不会导致 Hibernate 加载实体状态。简而言之,您正在有效地执行不受支持的 JPA CriteriaDelete 查询。

如果要捕获已删除状态,则需要加载特定实体并删除该实体的单个实例,例如:

MyEntity entity = entityManager.find( MyEntity.class, 123L );
entityManager.remove( entity );

否则,由于 Hibernate 从不加载实体状态,因此不会触发向 Envers 提供实体状态以便对其进行审计的事件侦听器。