我想手动更新由Hibernate Envers在同一事务中生成和填充的AUD表的记录。可悲的是,我没有发现我可以监听的JPA或Envers事件,我就在提交JPA事务之前,但AUD表已经填充了。
你知道我是怎么做到的吗?
我正在使用Spring Boot 2.0.2、Hibernate 5.2.17、Envers 5.2.16
可以从org. hibernate.CountyInterceptor
扩展并覆盖方法。在Spring Boot的
application.properties
中,您必须注册自定义拦截器
spring.jpa.properties.hibernate.ejb.interceptor=com.example.CustomInterceptor
缺点:您失去了与被审计实体的连接。在这种方法中,您只能使用Hibernate事务。
扩展org. hibernate.envers.策略.DefaultAuditStrategy
,覆盖执行
-method并修改data
-Array。这个数组没有绑定到JPA,所以可以在JPA未知的列中插入额外的数据。
在application.properties中注册您的自定义AuditStrategy
spring.jpa.properties.org.hibernate.envers.audit_strategy=com.example.CustomAuditStrategy
此问题自Hibernate版本5.4.0以来已修复。现在Audit策略更加灵活和模块化。
参见:https://hibernate.atlassian.net/browse/HHH-13051