Попробуйте заглянуть в SPI событий Hibernate. Hibernate Envers реализует некоторые из предоставленных SPI. Я сейчас использую Hibernate 5.
Реализация интерфейса org.hibernate.event.spi.PostUpdateEventListener
, который позволит переопределять public void onPostUpdate(PostUpdateEvent event)
. PostUpdateEvent
позволяет получить доступ к некоторым полезным материалам, например, PostUpdateEvent#getOldState()
.
Как только вы это сделаете, вам нужно зарегистрировать этот слушатель для интегратора SPI. Реализация org.hibernate.integrator.spi.Integrator
.
// Overriden public void integrate(Metadata metadata, SessionFactoryImplementor sessionFactory,
// SessionFactoryServiceRegistry serviceRegistry)
final EventListenerRegistry eventListenerRegistry = serviceRegistry.getService(EventListenerRegistry.class);
eventListenerRegistry.appendListeners(EventType.POST_UPDATE, YourListener.INSTANCE);
Затем зарегистрируйте этот интегратор в своем приложении, создав META-INF/services/org.hibernate.integrator.spi.Integrator
. Внутри этого файла вам нужно поместить имя класса для вашего реализованного Hibernate Integrator. Пример:
com.company.my.ImplementedHibernateIntegrator
Другие версии Hibernate могут иметь другой подход, например, https://vladmihalcea.com/hibernate-event-listeners/