web-dev-qa-db-ja.com

Springでトランザクション中であるかどうかを確認するにはどうすればよいですか?

Springサービスの永続化に問題があります。 Rest-Controller Rはリクエストを受け取り、コードのいくつかのレイヤーを介して複雑な方法でサービスSを呼び出します。 Sのserviceメソッドはトランザクションを宣言します。トランザクションを開始するのはこれが初めてです。しかし、サービスはすでにトランザクションが開始されているように動作し、私のデータオブジェクトの一部はセッションの一部になります(そうすることはできません)。トランザクションがすでにアクティブであるかどうかをどのように判断できますか? EntityManagerやJpaTransactionManagerを挿入しようとしました。しかし、どちらも役に立たないようです。

自分が取引中であるかどうかを確認するにはどうすればよいですか?

疑わしい容疑者を探すためにこれらの層をすべて調査する前に、そのことを確認したいと思います。

11
Uwe Allner

TransactionSynchronizationManager.isActualTransactionActive()を使用して、トランザクションがアクティブかどうかを確認できます。ただし、サービスメソッドを実行する前に呼び出す必要があります。

また、現在のトランザクションのステータスを取得するには、

TransactionStatus status = TransactionAspectSupport.currentTransactionStatus();

さらに、トランザクションのロギングを有効にすることは、おそらくあなたにとって良い点です。

log4j.logger.org.hibernate.transaction=DEBUG,R
log4j.logger.org.springframework.transaction=DEBUG,R
18

使用できます

org.springframework.transaction.support.TransactionSynchronizationManager#isActualTransactionActive
1
Pio Ko