Spring Boot и Hibernate Envers: обновление AUD-таблицы вручную - PullRequest
0 голосов
/ 23 июня 2018

Я бы хотел обновить записи 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

1 Ответ

0 голосов
/ 09 января 2019

Эта проблема исправлена ​​с Hibernate версии 5.4.0. Теперь AuditStrategies стали более гибкими и модульными.

См .: https://hibernate.atlassian.net/browse/HHH-13051

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...