Я бы хотел обновить записи AUD-таблицы вручную, которые генерируются и заполняются Hibernate Envers в рамках одной транзакции.
К сожалению, я не нашел ни JPA-, ни Envers-события, которое я мог бы прослушать, что я прав до того, как JPA-транзакция будет зафиксирована, но AUD-таблицы уже заполнены.
Ты знаешь, как я могу это сделать?
Я использую Spring Boot 2.0.2, Hibernate 5.2.17, Envers 5.2.16
Редактировать (решение с перехватчиком)
Можно расширить с org.hibernate.EmptyInterceptor
и переопределить метод beforeTransactionCompletion
. В application.properties
Spring Boot вы должны зарегистрировать пользовательский перехватчик с помощью
spring.jpa.properties.hibernate.ejb.interceptor=com.example.CustomInterceptor
Недостаток: вы теряете связь с проверяемыми субъектами. В этом методе вы получаете только транзакцию гибернации для игры.
Редактировать II (Решение с AuditStrategy)
Расширить org.hibernate.envers.strategy.DefaultAuditStrategy
, переопределить метод perform
и изменить массив data
. Этот массив не привязан к JPA, поэтому можно вставить дополнительные данные в столбцы, которые не известны JPA.
Зарегистрируйте свою пользовательскую AuditStrategy в application.properties
spring.jpa.properties.org.hibernate.envers.audit_strategy=com.example.CustomAuditStrategy