Перехватчики Hibernate или события для аудита? - PullRequest
3 голосов
/ 17 октября 2010

Я записываю историю всех изменений в некоторых объектах и ​​собираюсь внедрить механизм, подобный Envers , чтобы автоматически позаботиться об этом У меня вопрос, использовать ли перехватчики Hibernate или их систему событий ?

Кажется, перехватчики немного проще и делают все, что мне нужно. А собственная документация Hibernate предлагает использовать перехватчики для «отслеживания информации аудита». Но их аудиторская информация отсутствует в сопутствующей таблице для каждой сущности, и Энверс использует систему событий, которую я себе представляю, по определенной причине.

Я использую Spring 3.0 и Hibernate 3.5 (последние стабильные версии).

ОБНОВЛЕНИЕ : триггеры базы данных нежелательны для этой ситуации. Мне не терпится услышать мысли о спящих перехватчиках и событиях для контрольных журналов / историй изменений.

1 Ответ

2 голосов
/ 19 октября 2010

Я думаю, что существенное различие между ними состоит в том, что вы можете определить только один Interceptor в вашей SessionFactory, но вы можете зарегистрировать много слушателей для определенного события.

Я собираюсь использовать Interceptors, так как я тольконужно что-то очень простое: временная метка, когда создается моя сущность (аннотация @Version заботится об обновлении свойства lastModified).

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
            <prop key="hibernate.hbm2ddl.auto">create</prop>
        </props>
    </property>
    <property name="packagesToScan" value="com.x.domain" />
    <property name="entityInterceptor" ref="onSaveInterceptor" />
</bean>

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/events.html#objectstate-interceptors

...