0

Spring、JBoss、および Maven と連携して Hibernate Envers の実装を試みています。

私は次のものを持っています:

  • spring.version: 3.1.0.RELEASE
  • hibernate.version: 3.5.0-Final
  • log4j.バージョン: 1.2.14
  • jboss-as-7.1.1.Final
  • mysql データベース

pom.xml に、必要な hibernate-envers を追加しました。

    <dependency>    
        <groupId>org.hibernate</groupId>    
        <artifactId>hibernate-envers</artifactId>    
        <version>${hibernate.version}</version>
    </dependency>

私のHibernate永続化クラスでは、次のものをインポートしています

import org.hibernate.envers.Audited;

だから、それは

@Entity
@Indexed
@Audited 
@Table(name = "COM_TEST")
public class MyTest extends AbstractReferenceDataObject { ...

関連する DB 列を含む COM_TEST_AUD db テーブルと、REVINFO db テーブルがあることを確認しました。

コードを実行すると、既存の休止状態の実装を使用して COM_TEST のレコードが更新されます。ただし、COM_TEST_AUD または REVINFO db テーブルには何も書き込まれません。

私のpersistence.xmlには次のプロパティがあります

    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
        <property name="hibernate.connection.autocommit" value="true" />
        <property name="hibernate.hbm2ddl.auto" value="validate"/>
        <property name="hibernate.show_sql" value="false"/>
        <property name="hibernate.cache.use_second_level_cache" value="true"/>
        <property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.SingletonEhCacheProvider"/>
        <property name="hibernate.search.default.directory_provider" value="org.hibernate.search.store.FSDirectoryProvider"/>
        <property name="hibernate.search.default.indexBase" value="./lucene/indexes"/>
        <property name="hibernate.search.default.batch.merge_factor" value="10"/>
        <property name="hibernate.search.default.batch.max_buffered_docs" value="10"/>
    </properties>

考えられることはほぼすべて試しました。JBoss を起動すると、COM_TEST_AUD と REVINFO がどのように必要とされ、どのように処理されるかが表示されるので、動作しているように見えます。

DBに書き込めない理由がわかりません。ログファイルには何も書き込まれず、ログは次のように設定されています:

        <logger category="org.hibernate">
            <level name="DEBUG"/>
        </logger>

以下の JBoss モジュール ディレクトリで、hibernate-envers-4.0.1.Final.jar を使用していることに気付きました。

jboss-as-7.1.1.Final\modules\org\hibernate\envers\main

プロジェクト pom.xml を 3.5.0-Final ではなく 4.0.1.Final に変更しましたが、違いはありませんでした

誰か助けてくれませんか?

4

1 に答える 1

1

Hibernate 3.x を使用しているため、Envers ドキュメントのクイックスタートpersistence.xmlセクションで説明されているように、で適切な EventListeners を構成する必要があります。

<property name="hibernate.ejb.event.post-insert"
         value="org.hibernate.ejb.event.EJB3PostInsertEventListener,org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.post-update"
         value="org.hibernate.ejb.event.EJB3PostUpdateEventListener,org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.post-delete"
         value="org.hibernate.ejb.event.EJB3PostDeleteEventListener,org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.pre-collection-update"
         value="org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.pre-collection-remove"
         value="org.hibernate.envers.event.AuditEventListener" />
<property name="hibernate.ejb.event.post-collection-recreate"
         value="org.hibernate.envers.event.AuditEventListener" />

注:JPA経由でHibernateを使用しているとは述べていませんでしたが、 apersistence.xmlに言及しているため、JPAを使用しているようです。その場合は、ドキュメントでわかるように、構成が少し異なります。

Hibernate 4.x を使用している場合、この構成は必要ありません。

于 2013-03-26T20:59:29.667 に答える