2016-08-18 9 views
0

のロールバックは、私はいくつかの作業を行うサービスを提供しています。私が理解しているように、このメソッドはトランザクション内で実行されています(存在する場合は継続し、存在しない場合は新しいものを作成します)。しかし私が期待していたのは、processOne(..)というメソッドが新しいトランザクションで実行されているからです。もしこの場合は、すべてのトランザクションがコミットされるべきです。しかし、エラーが発生した場合、プロセス全体がロールバックされます。現在の取引だけでなく、どうしましたか ?春取引 - - 新しい必要な親

答えて

1

processOneメソッド呼び出しは、他のクラスから直接呼び出された場合にのみ、同じクラスから呼び出されたときに新しいトランザクションを作成しません。

this questionも参照してください。 spring reference manualから

:(デフォルト)プロキシモードで

、唯一の外部メソッドは、プロキシを介して入ってくるが遮断されるコール。つまり、ターゲットオブジェクトの別のメソッドを呼び出すターゲットオブジェクト内のメソッドを実際に呼び出すと、呼び出されたメソッドが@Transactionalでマークされていても、実行時に実際のトランザクションにつながることはありません。また、プロキシは、初期化コード(@PostConstruct)にこの機能を依存させないように、期待される動作を提供するために完全に初期化する必要があります。

関連する問題