Шаблоны прослушивателей событий гибернации

#java #hibernate

#java #гибернация

Вопрос:

Для веб-приложения Java (Struts / Spring / Hibernate) прослушиватели событий гибернации являются новой функцией для ведения журнала аудита.

Когда возникает необходимость получить некоторую дополнительную информацию, такую как пользователь, который обновил объект, сведения о том, какие атрибуты объекта изменились по сравнению с атрибутами объекта предварительного просмотра и т.д., Существуют ли шаблоны наилучшей практики, которым можно следовать?

Пример: Для информации, связанной с пользователем, если каждый объект поддерживает атрибуты журнала изменений (UpdatedBy, CreatedBy), тогда сам объект может предоставить информацию.

Для сравнения того, какие атрибуты объекта изменились по сравнению с предыдущим состоянием объекта в DB, нет ли другого способа, кроме сравнения всех атрибутов объектов перед вставкой? (Это кажется избыточной мерой)

Ответ №1:

Если вам это нужно специально для аудита, нет необходимости изобретать велосипед — взгляните на JBoss Envers

Ответ №2:

В справочной документации по гибернации предоставляется AuditInterceptor в качестве примера реализации перехватчика гибернации.

Вы можете расширить EmptyInterceptor и переопределить метод boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) , который имеет ссылку на текущий объект и его идентификатор, содержимое его полей в текущем и предыдущем состоянии и все имена полей и типы.

С приложением на базе Spring вы можете настроить эти перехватчики в контексте вашего приложения Spring, где вы настраиваете Hibernate SessionFactory.