Hibernate环境不会将删除的数据保存在aud表中



我在春季启动时使用hibernate环境,在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

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

我如何删除记录是通过使用这种方法:

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加载实体状态。简而言之,您正在有效地执行一个不受支持的JPACriteriaDelete查询。

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

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

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

最新更新