我记录了某些实体的所有更改的历史记录,并且即将实现类似于Envers的机制来自动处理此问题。我的问题是是否使用Hibernate interceptors or their event system?
看起来拦截器有点简单,我需要的只是它。 Hibernate自己的文档建议使用拦截器来“跟踪审计信息”。但是他们的审计信息不在每个实体的配套表中,而Envers使用我想象的事件系统是有原因的。
我使用的是Spring 3.0和Hibernate 3.5(最新的稳定版)。
更新 :对于这种情况,不希望使用数据库触发器。我非常希望听到有关hibernate拦截器与审计跟踪/更改历史事件的想法。
答案 0 :(得分:2)
我认为两者之间的本质区别在于你只能在SessionFactory中定义一个拦截器,但你可以为特定事件注册许多侦听器。
我将使用Interceptor,因为我只想要一些非常简单的东西:创建实体时的时间戳(@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