私は休止状態と春を使用しており、特定のオブジェクトのプロパティ変更イベントに反応する必要があります。 データがdbに保存された後でのみ、イベントを取得したいと考えています。 トランザクションを使用する方法はありますか? このオプションを休止状態にしますか?オブジェクトをデータベースに保存した後でプロパティ変更イベントを発生させるには
おかげ
私は休止状態と春を使用しており、特定のオブジェクトのプロパティ変更イベントに反応する必要があります。 データがdbに保存された後でのみ、イベントを取得したいと考えています。 トランザクションを使用する方法はありますか? このオプションを休止状態にしますか?オブジェクトをデータベースに保存した後でプロパティ変更イベントを発生させるには
おかげ
はHibernateインターセプタまたは休止イベントリスナーでこれを行うことができます。両方の詳細については、Hibernate Docsを参照してください。
Hibernate Interceptors or Event listenersは、この要件を満たす一般的な方法です。インターセプタを使用する場合は、documentationを読んでください。厄介なことがあります。例えば、onFlushDirtyしかし、変化を検出し、監査ログを行うには絶好の場所です:いないすべてのフラッシュが新しいcurrentStateのオブジェクトに伝播される場合には、データベースと実際の同期で終わること
注意、必ずしもデータベースに(直ちに)アクセスする必要はありません。
これは、実際にデータベースに書き込まれる前に、全く同じデータでonFlushDirtyが何度も呼び出せることを意味します。この例で重複したログを避けるには、ログに記録する変更に関する情報をキャッシュして、postFlushを使用して書き出します。
AfterReturningアスペクトを使用することはできませんか?これはSpring AOPを使用して簡単に行うことができます
Hibernateを使用して行う必要がある場合は、PostUpdateEventListenerインタフェースを実装するクラスを作成する必要があります。 これは、PostUpdateEventオブジェクトを提供するonPostUpdateメソッドの具体的な実装を提供するよう求めます。 event.getEntity()を使用してエンティティを取得し、処理を続行します。