2011-10-04 6 views
2

Я пытаюсь реализовать простой подход на основе перехватчика Envers + для проверки моих объектов Hibernate. Для этого, в соответствии с типичным подходом, есть BaseEntity со всеми свойствами аудита:Envers with Hibernate Interceptors, onDelete

BaseEntity{ 
    createdOn; 
    createdBy; 
    updatedOn; 
    updatedBy; 
} 

В AuditInterceptor я переопределены onFlushDirty и onSave метод для управления указанных свойств в зависимости от того, является ли это предприятие Сохранить или Update , Все работает как ожидается для сохранения и обновления.

Проблема, с которой я столкнулся: мне нужен способ управлять указанными выше свойствами для операций удаления. Переопределение onDelete дает мне дескриптор массива state[], но его изменение не отражается в таблицах _AUD (аудита). В двух словах: я хочу также иметь возможность проводить аудит операций удаления в таблицах аудита.

Есть ли обходной путь для этого, или я чего-то не хватает?

ответ

1

Я не думаю, что вам нужно реализовать методы onSave, onFlushDirty.

Вам просто нужно реализовать интерфейс RevisionListener. Если вы следуете шаблону здесь, вам не нужно добавлять эти свойства (createdOn и т. Д.) К своим сущностям (если они вам не нужны для нормальной работы).

Для получения более подробной информации см. http://docs.jboss.org/hibernate/envers/3.6/reference/en-US/html_single/#revisionlog. В этом примере они используют Seam для входа вошедшего в систему пользователя.

Envers позволяет вам отделить ваш аудит от ваших объектов, который сохраняет вашу нормальную модель в чистоте и сводит к минимуму код, необходимый для проведения аудита.

+1

Ничего себе. Когда я впервые посмотрел на ваш ответ, я подумал, что этот парень пропустил это. Но, оказывается, я все время пропадал. Большое спасибо! – pugmarx

Смежные вопросы