4

Customer、Assessment、Rating などのいくつかの Java クラスを Hibernate を使用してデータベースにマップしました。現在、永続データへのすべての変更の履歴モードについて考えています。アプリケーションは Web アプリケーションです。データを削除 (または編集) する場合、別のユーザーが変更を確認して元に戻すことができる必要があります。変更は現在のセッションの範囲外であるため、元に戻す機能に推奨されるコマンド パターンなどでこれを解決する方法がわかりません。

単一値編集の場合、この質問のようなアプローチは問題ないように思えます。しかし、永続エンティティ全体の削除はどうでしょうか? 最も簡単な方法は、この顧客が削除されたかどうかを示すフラグをテーブルに作成することです。最も複雑な方法は、削除されたエンティティが格納されるクラスごとにテーブルを作成することです。間に何かありますか?そして、これら2つのことをO / RMシステム(私の場合はHibernate)に快適に統合し、SQLをいじることなく(移植性のために避けたい)、十分な柔軟性を維持するにはどうすればよいですか?

ベストプラクティスはありますか?

4

3 に答える 3

4

監査/取り消し証跡を維持する 1 つの方法は、オブジェクトのレコードの各バージョンにバージョン番号を付けることです。これが単純なバージョン番号である場合、現在のバージョンを見つけるのは骨の折れる作業になるため、逆のバージョン番号付けが最適です。「バージョン ' 0 は常に現在のものであり、更新を行うと、以前のすべてのバージョンのバージョン番号がインクリメントされます。オブジェクトの削除は、現在のレコードのバージョン番号をインクリメントし、新しいものを 0 に挿入しないことによって行われます。

属性ごとのアプローチと比較して、これははるかに単純なロールバックまたは履歴バージョン ビューを作成しますが、より多くのスペースを必要とします。

于 2008-10-15T15:36:50.570 に答える
2

これを行う 1 つの方法は、変更されたエンティティのエンティティ ID、アクション (編集/削除)、プロパティ名、元の値、新しい値のプロパティを持つ「変更履歴」エンティティを作成することです。編集を実行しているユーザーへの参照もあるかもしれません。削除すると、削除されたエンティティのすべてのプロパティに対して、アクション「削除」でエンティティが作成されます。

このエンティティは、取り消しと変更履歴の表示を実行するのに十分なデータを提供します。

于 2008-10-15T15:15:35.200 に答える
0

うーん、私もこれに対する答えを探しています。これまでのところ、私が見つけた最高のものはwww.jboss.org/envers/フレームワークですが、それでも必要以上の作業が好きなようです。

于 2008-11-24T20:40:31.220 に答える