Простой способ сохранить базовые данные аудита для доменных объектов? - PullRequest
4 голосов
/ 07 июля 2010

Мое приложение использует большие деревья доменных объектов, и для большинства из этих объектов я хотел бы сохранить некоторую базовую информацию (обновлено, изменено время и т. Д.).Я уже добавил эти свойства и столбцы в свое приложение.

Я собирался закодировать настройку этих значений во всех различных конструкторах и т. Д., Когда мне пришло в голову, что уровень персистентности должен обрабатывать это прозрачно.

Но как?

Конечно, я мог бы сделать это из моего DAO, но как обращаться с объектами, которые сохраняются с помощью каскадного сохранения?Есть ли способ перехватить метод persist () на них?

Какой хороший способ реализовать эту возможность?

Ответы [ 2 ]

6 голосов
/ 07 июля 2010

Возможно, вы захотите взглянуть на Hibernate Envers.

5 голосов
/ 07 июля 2010

Если вы собираетесь использовать JPA для аудита, вы можете положиться на аннотации обратного вызова PrePersist и PreUpdate. В JPA WikiBook есть один такой пример . В этом случае очень помогает иметь сопоставленный суперкласс, в противном случае вы продолжите делать это с помощью пользовательского пробела.

Еще один способ сделать это - использовать триггеры (гм) для таблиц. Это оказывает влияние на производительность, хотя. Проект Openbravo ERP , похоже, использует этот подход для создания контрольного журнала.

Обновление : Рекомендуется разделить функции аудита на другой класс, отличный от суперкласса модели предметной области. Слушатели JPA Event помогут вам добиться того же. Хороший пример присутствует здесь .

...