4

我记录了对某些实体的所有更改的历史记录,并且即将实现类似于Envers的机制来自动处理这个问题。我的问题是是否使用 Hibernate拦截器或它们的事件系统

拦截器似乎更简单一些,可以满足我的所有需求。Hibernate 自己的文档建议使用拦截器来“跟踪审计信息”。但是他们的审计信息不在每个实体的伴随表中,Envers 使用我想象的事件系统是有原因的。

我正在使用 Spring 3.0 和 Hibernate 3.5(最新版本)。

更新:数据库触发器不适用于这种情况。我很想听听关于休眠拦截器与审计跟踪/更改历史事件的想法。

4

1 回答 1

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

于 2010-10-18T22:52:35.463 回答