0

hibernate と envers を使用しようとしており、次のプロパティを使用してスキーマに初期データを作成したいと考えています。

<property name="hibernate.hbm2ddl.auto" value="create"/>
<property name="hibernate.hbm2ddl.import_files" value="/META-INF/spring/import.sql"/>

Envers もこの Spring アプリケーションと統合されており、最初の作成時に監査テーブルを作成します。

<property name="org.hibernate.envers.audit_strategy"        value="org.hibernate.envers.strategy.ValidityAuditStrategy"/>
<property name="org.hibernate.envers.audit_strategy_validity_store_revend_timestamp" value="true"/>
<property name="org.hibernate.envers.revision_field_name"      value="revision"/>
<property name="org.hibernate.envers.audit_strategy_validity_end_rev_field_name" value="revision_end"/>
<property name="org.hibernate.envers.revision_type_field_name" value="revision_type"/>
<property name="org.hibernate.envers.audit_strategy_validity_revend_timestamp_field_name" value="revision_end_timestamp"/>
<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" />    

import.sql のすべての挿入エントリに対して、監査テーブルに自動エントリを作成する方法に興味があります。

誰かがこれを行った場合は、親切に教えてください。

ありがとう。

4

1 に答える 1

1

上記のコメントは正しいです。Envers はオブジェクト レベルでエンティティ操作をインターセプトするため、直接クエリ (HQL/JPAQL を使用したバッチ挿入/更新などを含む) は監査されません。

ここでの解決策は、オブジェクトを使用して初期データを作成するか、初期リビジョンと挿入された各行の「挿入」監査エントリを作成する SQL スクリプトを作成することです。

于 2013-03-21T16:07:24.213 に答える