REQUIRES_NEW
が戻ってすべてのトランザクションをロールされた外側のトランザクションのロールバック:のGrails /春REQUIRES_NEWが
私はこの方法はまた、方法は@Transactional(propagation = REQUIRED)
をマークしたBean内で@Transactional(propagation = REQUIRES_NEW)
をマークしています。これらのメソッドは決して互いに呼び出しません。それらは別のBeanから個別に呼び出されます。しかし、私のメソッドがREQUIRES_NEW
とマークされていない場合、REQUIRED
とマークされたメソッド(問題がある)を含むトランザクション全体をロールバックします。
私の理解では、Spring AOPがこのように因数分解された場合、REQUIRES_NEW
メソッドをインターセプトして新しい論理トランザクションを開始する可能性があります。
一般的な考え方は次のようになります。
@Transactional
class TransactionalBean{
@Transactional(propagation = REQUIRED)
public void methodA(){ //do transactional work }
@Transactional(propagation = REQUIRES_NEW)
public void methodB(){ //do transactional work }
}
そして呼び出しBeanはそうのようになります。
@Transactional
class CallingBean{
@Autowired
TransactionalBean
public void doWork(){
TransactionalBean.methodA();
TransactionalBean.methodB();
}
}
だから、方法AとBが成功した場合、すべてが正常です。しかし、方法Bが失敗すると、方法Aで行われた作業はロールバックされます。私が理解しているのは、methodB()
が呼び出されたときにAOPによって傍受され、新しいトランザクションを開始し、他のトランザクションを一時停止するが、動作していないということです。これをどうやって解決するのですか?私はGrails 2.5、Hibernate、JPAを使用しています。
を使用するための注釈。 2.5はもはや維持されていない。 –
残念ながら私はこのプロジェクトで2.5に固執しています。それはフレームワークの問題ですか? – dirtbiker