0

JTATransactionManagerを使用してトランザクションを管理しています。@TransactionalSpringのアノテーションでラップしたいコードの1つには、 2つのデータベース呼び出しがあります。1つはHibernate SessionFactoryを使用し、もう1つはプレーンJDBCを使用します。どちらも同じdataSourceを使用します。したがって、両方が同じトランザクションにバインドされることを期待しています。

ただし、1つのトランザクションが使用されているようには見えません。代わりに、それぞれが独自のトランザクションを開きます。これの理由は何でしょうか。?単一のトランザクションを使用してこれらの両方の操作をバインドするようにするにはどうすればよいですか。?

必要に応じて構成とコードを提供できます。

4

1 に答える 1

0

両方のデータベース呼び出しで、次のように伝播を使用していることを確認してPropagation.NESTEDください

  @Transactional(propagation=Propagation.NESTED) 

ラッパーメソッドでは、Propagation.REQUIRED orPropagation.REQUIRED_NEW` として言及します

  @Transactional(propagation=Propagation.REQUIRED)

また

  @Transactional(propagation=Propagation.REQUIRED_NEW)

これを行うことで、両方の DB 呼び出しがラッパー メソッドのトランザクション境界を継承することに言及します。

于 2012-11-13T02:42:40.360 に答える