Spring Framework マニュアルでは、PROPAGATION_REQUIRES_NEW の場合、現在のトランザクションが中断されると述べています。
その「中断された取引」とは何ですか?タイムアウトのタイマーが現在のトランザクションのカウントを停止しますか? そのような一時停止の実際の意味は何ですか?
ありがとうございました、
アサフ
Spring Framework マニュアルでは、PROPAGATION_REQUIRES_NEW の場合、現在のトランザクションが中断されると述べています。
その「中断された取引」とは何ですか?タイムアウトのタイマーが現在のトランザクションのカウントを停止しますか? そのような一時停止の実際の意味は何ですか?
ありがとうございました、
アサフ
特別なことを意味するわけではありません。一時停止されたトランザクションは、挿入、更新、コミット、またはロールバックに一時的に使用されない単なるトランザクションです。これは、指定された伝播プロパティのために新しいトランザクションを作成する必要があり、アクティブにできるトランザクションは 1 つだけであるためです。同時に。
基本的に、ネスト モデルとフラットモデルの 2 つのトランザクション モデルがあります。ネストされたモデルでは、トランザクションを開始し、別のトランザクションが必要な場合、最初のトランザクションはアクティブなままです。つまり、2 番目のトランザクションはその親内にネストされます。一方、フラット モデルでは、最初のトランザクションは中断されます。つまり、新しいトランザクションが完了するまで使用しません。
私の知る限り、フラット モデルはほぼ独占的に使用されています (Spring と EJB 仕様も含む) 。これは、実装がはるかに簡単であるためです。アクティブなトランザクションは常に 1 つしかないため、ロールバックの場合に何をすべきかを簡単に決定できます。 、たとえば、例外のためです。さらに重要なことは、ネストされたモデルが必要な場合は、基礎となるデータベースがそれをサポートする必要があるため、この場合はフラット モデルが単なる共通点です。