4

いくつかのエンティティに対するすべての変更の履歴を記録し、これを自動的に処理するEnversと同様のメカニズムを実装しようとしています。私の質問は、Hibernateインターセプターまたはそのイベント システムを使用するかどうかです。

インターセプターはもう少しシンプルで、必要なすべてを実行しているようです。また、Hibernate 自身のドキュメントでは、「監査情報の追跡」にインターセプターを使用することが提案されています。しかし、彼らの監査情報は各エンティティのコンパニオン テーブルにはなく、Envers は私が想像する理由でイベント システムを使用しています。

Spring 3.0 と Hibernate 3.5 (最新の安定版) を使用しています。

UPDATE : データベース トリガーは、この状況では望ましくありません。ハイバネートインターセプターと監査証跡/変更履歴のイベントについての考えを聞きたいと思っています。

4

1 に答える 1

2

この 2 つの本質的な違いは、SessionFactory で定義できる Interceptor は 1 つだけですが、特定のイベントに対して多数のリスナーを登録できることです。

@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 に答える