2

Hibernate エンティティを監査するために、単純な Envers + インターセプター ベースのアプローチを実装しようとしています。このために、典型的なアプローチに従って、BaseEntityすべての監査プロパティを備えた があります。

BaseEntity{
    createdOn;
    createdBy;
    updatedOn;
    updatedBy;
}

では、それがエンティティの保存か更新かに応じて、上記のプロパティを操作するメソッドをAuditInterceptorオーバーライドonFlushDirtyしました。onSave保存と更新では、すべてが期待どおりに機能します。

私が直面している問題は次のとおりです。削除操作でも上記のプロパティを操作できるようにする方法が必要です。オーバーライドすると配列onDeleteへのハンドルが得られますがstate[]、それを変更しても _AUD (監査) テーブルには反映されません。一言で言えば、監査テーブルの削除操作も監査できるようにしたいと考えています。

これに対する回避策はありますか、それとも何か不足していますか?

4

1 に答える 1

1

onSave、onFlushDirty メソッドを実装する必要はないと思います。

RevisionListener インターフェイスを実装するだけです。ここでのパターンに従えば、これらのプロパティ (createdOn など) をエンティティに追加する必要もありません (通常の操作で必要でない限り)。

詳細については、 http://docs.jboss.org/hibernate/envers/3.6/reference/en-US/html_single/#revisionlogを参照してください。この例では、Seam を使用してログインしているユーザーを取得しています。

Envers を使用すると、監査をエンティティから分離できるため、通常のモデルをクリーンに保ち、監査に必要なコードを最小限に抑えることができます。

于 2011-10-04T10:02:57.927 に答える