9

大規模なデータベースを使用して、本番環境で Hibernate ベースのアプリを使用しています。このアプリケーションの 2 つのエンティティ (2 つのテーブル) に監査を追加する必要があるため、Envers を使用することにしました。

INSERT、UPDATE、または DELETE ごとに、Envers は新しいレコードをエンティティの監査テーブルに追加します。

アプリケーションの開始時から Envers のサポートがあれば、監査テーブルはエンティティの作成時 (INSERT) に入力されます。

Envers のドキュメントは非常に薄く、Envers を既存のアプリケーションに追加することについては何も言及されていません。

Envers サポートを追加してそれぞれの監査テーブルを作成するだけでは、それらは空で始まるため、既存のエンティティを更新すると、Envers は新しい値を記録する監査テーブルにレコードを追加しますが、以前の値は失われます。

既存のデータベースを持つアプリケーションに Envers サポートを追加するにはどうすればよいですか?

4

3 に答える 3

3

現在、そのための組み込みのソリューションはありません。

「正しい」方法は、既存のエンティティごとにそのリビジョンにバインドされた監査レコードを挿入するとともに、SQL スクリプトを記述する (または手動で作成する) ことです。

実際、これは非常によくリクエストされる機能なので、貢献したい場合は大歓迎です!

于 2013-03-21T16:09:10.420 に答える
1

手動で挿入する必要があります。何かのようなもの

INSERT INTO z_envers_revisions (ID, timestamp, user_id, user_name) values (1, round((sysdate - to_date('19700101','YYYYMMDD')) * 86400000) , 42, 'UserName');

INSERT INTO z_Table1(rev, revtype, id, description, name) select 1 as rev, 0 as revtype, id, description, name from Table1;
INSERT INTO z_Table2(rev, revtype, id, description, name) select 1 as rev, 0 as revtype, id, description, name from Table2;

ここでは、監査テーブルの前にazを付けて短くしています

于 2013-03-21T16:43:57.350 に答える