0

Hibernate Envers を使用してログを記録していますが、履歴を追跡しているオブジェクトにイベントのタイプを設定する必要がありました。nullプロパティは必須であるため、設定されていないたびに配置するという考えがありましたlastEvent

そこで、プロパティを設定しようとしました@PrePersist

@PrePersist
public void checkIfLastEventWasModified() {
    if (!lastEventModified) {
        lastEvent = null;
    }
}

しかし、どうやら休止状態は、これらのインターセプターがオブジェクトをダーティかどうかとしてマークすると見なします。したがって、このコードがダーティ チェックで実行されたときは、オブジェクトで何も変更されていない場合lastEventModifiedでもfalse、毎回lastEventに設定されます。null

Hibernate の EventListeners でも試してみましたが、それらはトランザクションの外部で実行され、プロパティを設定できましたが、データベースに保存されませんでした。

どちらの解決策も正しくないように感じますが、この問題を最善の方法で解決する方法がわかりません。

4

1 に答える 1

0

3.6.8 より上の Hibernate バージョンを使用している場合は、独自のEntityTrackingRevisionListener( javadoc ) を作成することをお勧めします。エンティティが変更されるたびに (つまり、新しいリビジョンが作成されるたびに) 呼び出され、永続化される前に Envers によって監査されるエンティティのプロパティを変更できます。

于 2012-07-27T12:31:20.090 に答える