2017-11-06 11 views
0

私は自分のデータの履歴を作成するために休止状態を使用していますが、正常に動作しています。ここで問題となるのは、履歴テーブルに重複したデータを作成することです。つまり、履歴テーブルにデータを作成するのは、監査対象テーブルに変更があったかどうかです。私は変更されたフィールドだけを履歴テーブルに保存します。私は冬眠するために新しいです。私に何ができる?Hibernate Enversを使用した監査

+0

これまでに試した解決策をご提供ください。 – Garren

+0

@ Garren-私は今、監査された注釈を試しましたが、問題は履歴テーブルの重複データです。これを行う他の方法はありますか? – iamarpit

答えて

0

私があなたの質問を正しく理解していれば、Enversは少なくともそのようには機能しません。

Enversは、コミットする直前に、監査されたエンティティの状態を調べ、変更された属性があるかどうかを判断し、その時点でそのエンティティのすべての監査フィールドのスナップショットを記録します。つまり、監査エントリが作成されないのは、属性が変更されていない場合のみです。

しかし、スナップショットアプローチも使用しています。なぜなら、これはQuery APIと非常によく似ているからです。

特定のリビジョンのエンティティを検索するクエリが、そのリビジョンからすべての行を最初に読み込み、各行を反復し、取得した列の状態をマージして単一のインスタンスをインスタンス化するだけの場合行結果セット。

スナップショットのアプローチでは、次のクエリ、ループまたは反復処理に至りません。

SELECT e FROM AuditedEntity e WHERE e.revisionNumber = :revisionNumber 

これは、はるかに効率的なI/Oの観点の両方から単一行の結果セットではなく複数行の結果セットのクライアントよりもストリーミングするためのデータ・ページとネットワークを読み取るデータベースとなります。

この場合、「スペースは安い」と言っていますが、あなたのアプリケーションが他のやり方でやり遂げることになるコストと非効率性とを比較すると、は本当に当てはまります。

これは、おそらくユーザー設定の戦略によってEnversがサポートしたいものなら、JIRAの新しい機能要求をhibernate-enversに記録することを歓迎し、その実現可能性を見てみることができます。

+0

ご清聴ありがとうございます。 – iamarpit

関連する問題