2013-01-02 6 views
13

私は、監査しようとしているDB構造がかなり複雑です。現在私はEnversを実行しており、各オブジェクトに加えられた変更を監査します。これは本当にうまくいく!Hibernate Envers - 変更されたフィールドの取得

ここで、UIの監査情報をいくつか表示します。オブジェクト/テーブルはかなり複雑になりましたので、監査でどのフィールドが変更されたかを確認する方法を探していました。現在、Enversには、リビジョンIDでスタンプされた各オブジェクトのスナップショットが保存されています。私は各オブジェクトのリビジョンを見て、何が変わったのかを手動で問い合わせることができますが、どのフィールドが変更されたかを保存する方法があるかどうか疑問に思っていました。Enversこれは可能ですか?私は2011年からthisリンクを発見し、各オブジェクトフィールドを手動でチェックすることを推奨します。私の心配はスピードです。私は多くのオブジェクトに関連しており、更新されたフィールドは1つしかないかもしれません。私は変更されたものを見つけるために多くのフィールドを照会する必要があります。

変更されたフィールドを保存することはできますか?

おかげ

EDITは

私はので、私は何の改訂で変更されたかを見ることができますREVCHANGESテーブルを使用していますと言っているはずですが、再度、これが唯一のエンティティレベルではないフィールドレベルである

+1

1 - 更新が行われたときに我々は現在、差分を行うには、古いonPostUpdateリスナーを使用して、表に差分を記録しています。 1.何が変更され、余分なクレジットがあるのか​​:2.何が変更されたのか – ndtreviv

答えて

9

新しいEnversバージョンでは、ブール値フラグを使用して各リビジョンでどのプロパティが変更されたかを追跡できます。参照:

このため

http://docs.jboss.org/hibernate/core/4.1/devguide/en-US/html/ch15.html#envers-tracking-properties-changes

+4

この問題は、私が知る限り、この情報をプログラムで確認する方法がないことを意味しています。監査クエリでのみ使用できます。それはあなたが持っているリビジョンを制限するのに役立ちますが、何が起こったのかのログを表示することは賢明ではありません。 元のポスターの権利を理解していて、自分自身の問題については、リビジョンが読み込まれた後にこれらのフラグにアクセスする方法が必要です。さもなければ、ログは何が変わったのか把握するのに時間がかかるので役に立たない。 – user3402489

関連する問題