2017-01-17 7 views
1

休止Enversとエンティティから元の値を取得します。私は私の<em>Springboot</em>プロジェクトに<em>休止Envers</em>を設定しているし、今では私は疑問を持って、私は<em>@Audited</em>で注釈を付けたエンティティの各変化を保存しているが、

エンベロープはの後にエンティティのリビジョンを保存します。最初の変更が行われるので、変更後にエンティティテーブルと_AUDテーブルに新しい値が格納されます。次の変更は_AUDテーブルに保存されるので、最初の更新後に変更された内容はわかりますが、元の値(最初の変更より前は)が失われます。何か不足していますか? の値をの前に保存する方法はありますか(エンティティテーブルの最後の値が既にあるので)。

+1

_AUDテーブルに 'REVTYPE = 0'という行があるのか​​、それとも' REVTYPE = 1'か 'REVTYPE = 2'ですか? – Naros

+0

@Naros 1秒と2秒しかないので、Enversは監査の作成ではないようですね。 –

+0

はい。レコードをテーブルに挿入するにはどうすればいいですか?エンティティのレコードは偶然コレクションに保持されていますか? – Naros

答えて

2

Enversによって追跡三つの異なるリビジョンのタイプがあります。

  • ADD(REVTYPE = 0) - INSERT
  • MOD(REVTYPE = 1) - UPDATE
  • DEL(REVTYPE = 2) - DELETEが

これは、エントリがステートフルセッションを通じてHibernateによって挿入、更新、削除されている場合、Enversはこれらの変更を取得し、適切なREVTYPEエントリを監査テーブル。

エントリがHibernateのステートフルセッションの範囲外で操作されている場合、Enversはその変更を認識せず、対応するエントリは監査テーブルに追加されません。コメントに基づいて、REVTYPE=0(別名INSERT)の操作が表示されないのはこのためです。

このような状況では、リビジョン番号の順序を増やし、スクリプトやバッチ処理で適切なエントリを手動で追加して、行を挿入していることを確認して、Enversスキーマにエンティティの履歴の完全な可視性。

関連する問題