1

データベース内のデータへの変更の履歴を維持する必要があります。変更はあまり一般的ではないため、スペースの点でより効率的な差分だけでなく、行全体を格納しても問題ないようです。HibernateEnversはまともな解決策のようです。

ここで、Auditテーブルは、最初の挿入自体にデータを格納するシャドウテーブルに似ていることに気付きました。最初の更新が行われるまで、エンバーが監査情報を保存するのを防ぐことは可能ですか?非常に高性能なサーバーで実行していない可能性があるため、データベースのディスクフットプリントを削減したいだけです。実際のテーブルには最新のデータが含まれ、監査テーブルには現在の行ではなく履歴データのみが含まれるようにします。私はpersistence.xmlで特定の構成を使用していません。Hibernate 4.1は、アノテーションを使用した監査用のクラスを見つけているようです。私はポストインサートリスナーを扱うべきだと思いますが、それをどうするべきか正確にはわかりません。

4

1 に答える 1

0

これは以前にもリクエストされていましたが、おそらくそれ自体が問題の原因を持たない優れた機能であると思われます。

Envers には、 と の 2 つの監査戦略が付属していることを理解してDefaultくださいValidity

これDefaultAuditStrategyは、以前のリビジョン行が監査テーブルに存在することを期待しない、非常に基本的な戦略です。この特定の戦略は、変更された行のみが格納されている場合に簡単に機能する可能性があります。

しかし残念ながら、他の戦略はそうではありません。

は、変更が検出されたときに、有効性戦略列を操作するために以前の監査行が存在するValidityAuditStrategyことを期待しています。監査テーブルに挿入が格納されていない場合、戦略フィールドを正しく操作できないと戦略が判断するため、最初の変更は失敗します。

これはおそらく将来のある時点で変更される可能性がありますが、現時点ではそのようなケースはサポートされていません。

于 2016-12-09T01:41:36.370 に答える