2017-10-25 6 views
0

私はSpring + JPAアプリケーションを持っています。例外は、将来的に発生したとき、私は、データベースの変更をロールバックしたい今後例外をスローするときにトランザクションをロールバックする方法はありますか?

@Transactional(rollbackFor = Exception.class) 
public MyEntity execute(MyEntity entity) { 
    //database operations 
    em.persist(entity); 

    Executors.newSingleThreadExecutor().submit(() -> { 
     //long calculations 
     if (errorOccurs) 
      throw new RuntimeException("Rollback transaction"); 
    }); 

    return entity; 
} 

:私のサービスは、いくつかのデータベースの永続操作と非同期長い計算を行います。どうしたらいいですか?

+0

私にとって、トランザクションでの長い計算は明らかに悪い考えです。 –

+0

私は間違っているかもしれませんが、あなたは解決策のためにAOPを見ましたか? – CKing

答えて

1

これは、DAOクラス(データアクセスオブジェクト)のように見えます。一般に、DB接続やトランザクションを可能な限り短く開いたままにしたいので、これは悪い考えです。

私はあなたの長い計算が分かりませんが、エンティティを永続させる前にそれを作成します。

非同期および潜在的に並列な計算は非常に便利ですが、ここでは利点よりも危険性が高いと見なします。完了するまで待つとDBトランザクションはかなりの時間停止します。

関連する問題