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 提供实体状态以便对其进行审计的事件侦听器。
我在 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 提供实体状态以便对其进行审计的事件侦听器。