Spring Boot和Hibernate Envers:手动更新AUD表

时间:2018-06-23 12:21:37

标签: hibernate spring-boot spring-data-jpa hibernate-envers

我想手动更新AUD表的记录,该记录由Hibernate Envers在同一事务中生成和填充。 遗憾的是,我没有发现可以听的JPA或Envers事件,我在提交JPA事务之前就已经对了,但是AUD表已经被填充。​​

你知道我该怎么做吗?

我正在使用Spring Boot 2.0.2,Hibernate 5.2.17,Envers 5.2.16


编辑(使用拦截器解决方案)

可以从org.hibernate.EmptyInterceptor扩展并覆盖方法beforeTransactionCompletion。在Spring Boot的application.properties中,您必须向

注册自定义拦截器
spring.jpa.properties.hibernate.ejb.interceptor=com.example.CustomInterceptor

缺点:您失去了与已审计实体的连接。在这种方法中,您只能使用休眠事务。


Edit II(采用AuditStrategy解决方案)

扩展org.hibernate.envers.strategy.DefaultAuditStrategy,覆盖perform方法并修改data-Array。该数组未绑定到JPA,因此可以在JPA未知的列中插入其他数据。

在application.properties中注册自定义AuditStrategy

spring.jpa.properties.org.hibernate.envers.audit_strategy=com.example.CustomAuditStrategy

1 个答案:

答案 0 :(得分:0)

自Hibernate版本5.4.0起已解决此问题。现在,AuditStrategies更加灵活和模块化。

请参阅:https://hibernate.atlassian.net/browse/HHH-13051