2012-02-15 4 views

答えて

6

JPAのcallback methodsおよび/またはentity listenersを使用するだけで、インターセプタを追加する必要はありません。最初のアプローチでは

、あなたはこれらのアノテーションのいずれかで宣言されたエンティティのメソッドに追加:@PrePersist@PostPersist、​​、@PostUpdate@PreRemove@PostRemove、または@PostLoad。名前は自明のものであり、各イベント(プリ・パーシスト、ポスト・サスティンなど)に対して注釈付きメソッドが呼び出されることを意味します。

2番目のアプローチは似ていますが、メソッドは1つ以上の別々のクラスに実装されており、順番に@EntityListenersアノテーションを使用してエンティティに追加されます。

第2のアプローチはより柔軟ですが、発生する前後の永続性操作を傍受して、必要な操作を実行することができます。

+0

私はそれを知っていますが、たとえば、@PreUpdateを監査する必要がある場合、このコールバックメソッドが実行されると、JPAはすでにエンティティを更新したように見えます。実際、監査するためには、私のエンティティの最後の値が必要です。 – joaosavio

+2

'@ PreUpdate'は、データベース更新の前にある時点で呼び出されることが保証されています。以前の値を格納するには、 '@ PostLoad'に、同じエンティティの別の属性に現在の値を保存します。 '@ PreUpdate'が実行されるときに"古い "値がそこにあり、"新しい "値はその時点のエンティティの通常の属性になります。 –

+0

@PreUpdateメソッドでは、どうすれば古い値を取得できますか? – joaosavio

関連する問題