首页 文章

审计跟踪的Hibernate拦截器或事件?

提问于
浏览
3

我记录了一些实体的所有更改的历史记录,并且即将实现类似于Envers的机制来自动处理这个问题 . 我的问题是是否使用Hibernate interceptors or their event system

看起来拦截器有点简单,我需要的只是它 . Hibernate自己的文档建议使用拦截器来“跟踪审计信息” . 但是他们的审计信息不在每个实体的配套表中,而Envers使用我想象的事件系统是有原因的 .

我正在使用Spring 3.0和Hibernate 3.5(最新的稳定版) .

UPDATE :对于这种情况,数据库触发器是不可取的 . 我渴望听到有关hibernate拦截器与审计跟踪/更改历史事件的想法 .

1 回答

  • 2

    我认为两者之间的本质区别在于,您只能在SessionFactory中定义一个Interceptor,但是您可以为特定事件注册许多侦听器 .

    我将使用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

相关问题