2016-03-29 12 views
0

私はアプリケーション内のエンティティを監査するためにHibernateエンバーを使用しています。私は各エンティティごとに別の_auditテーブルを持っているし、それらのテーブルにフィールドが変更されているかどうかを示す_modブール型の列を持っています。Hibernate Envers:フィールドが2つのリビジョン間で変更されたかどうかを確認する方法?

しかし、私はどのようにクエリでその列を使用していないか、コード内でこのデータをどのように取得するのですか?

次のコードは、監査人のリストを示しています。どのデータが変更されたかを確認するにはどうすればよいですか?

List person = getAuditReader().createQuery() 
    .forEntitiesAtRevision(Person.class, 12) 
    .getResultList(); 
+0

私が答えたところでは、インターセプタのonFlushDirtyメソッドでエンティティが変更されたかどうかを調べ、この情報を監査テーブルに保持することができます。 previousStateとcurrentStateの引数を調べてみましょう。 – nukie

答えて

-1

Hibernateインターセプタを使用できます。 Here isインターセプタについての良い記事。インターセプタを使用すると、それはこのようになめらかになり、エンティティの更新/作成などで実行されるだろうコールバックを作成することができ :

public class EntityInterceptor extends EmptyInterceptor { 
    @Override 
    public boolean onFlushDirty(Object entity, 
           Serializable id, 
           Object[] currentState, 
           Object[] previousState, 
           String[] propertyNames, 
           Type[] types) { 
     if (entity instanceof YourEntity) { 
      //do update stuff 
      return true; 
     } 
     return false; 
    } 
} 

あなたは、エンティティの変更についての情報を収集するためにpreviousStatecurrentStateのを比較することができますし、それを他のテーブルに保持する。

+0

私はすでにエンバーの変更を保存するためにエンバーを使用しています。私はちょうど適切なデータを取得するためにテーブルを照会する必要があります。 – ashishjmeshram

+0

私は問題を理解していません...あなたはもっと具体的になりますか?エンティティごとに監査テーブルがあり、エンティティの変更時にそのテーブルを設定する必要があります。右?だから何が問題なの? – nukie

+0

私はそれらを適切に配置することができました。監査テーブルにデータを挿入する際の問題はありません。問題は、監査テーブルから詳細を取得するときです。 – ashishjmeshram

関連する問題