2017-03-02 3 views
0

ある特定のテーブルへの挿入が成功すると、2つのテーブル(監査テーブル)にレコードを挿入する必要があるという非常に特殊な要件があります。ここでListenerは常に同じトランザクションで呼び出されるため、Listenerの@PreInsertについては言及していません。最初の保存が成功した後に単に "save"メソッドを呼び出すだけで手動で行うことができます。リスナーを使用してJPA/EclipseLink/String-dataを試すことができる他の方法があるかどうかを知りたかったので、アプリケーションの将来の開発者は監査テーブルにデータを手動で挿入する必要がありません。メソッド呼び出しポストトランザクションコミット

基本的に私は@PostCommitタイプの機能を探しています。私を助けてください。

答えて

0

は、私はあなただけ HibernateはHibernateはEnversの作品と同じように、その事を行われた後、それはを実行したい、あなたは最終的には、コールバックは、あなたの現在のトランザクションの境界内で実行したいです信じています。これを行うには

、あなたは基本的には次のようなイベントアクションキューコールバックを登録する必要があります。

session.getActionQueue().registerProcess(
    new BeforeTransactionCompletionProcess() { 
    @Override 
    public void doBeforeTransactionCompletion(SessionImplementor session) { 
     // do whatever you want with the session here. 
    } 
    } 
); 

あなたが最終的に外取引あなたのコードを実行する必要がある場合、あなたは似た何かをすることができます:

session.getActionQueue().registerProcess(
    new AfterTransactionCompletionProcess() { 
    @Override 
    public void doAfterTransactionCompletion(boolean success, SharedSessionContractImplementor session) { 
     // do whatever you want with the session here. 
    } 
    } 
); 

いずれにしても、あなたはそれを得られるはずです。

関連する問題