私の質問は基本的にここにあるものと同じですが、答えに満足できないので、この質問を書いています。
Spring Framework マニュアルでは、PROPAGATION_REQUIRES_NEW の場合、現在のトランザクションが中断されると記載されています。これは実際にどのように実装されていますか?ほとんどのデータベースはネストされたトランザクションをサポートしておらず、1 つの接続で 1 つのトランザクションしか実行できないことを知っています。つまり、元のトランザクションを「使用しない」だけで新しいトランザクションを開始することはできません。新しいトランザクションを開始する前に、元のトランザクションをコミットまたはロールバックする必要があります。
例:
START TRANSACTION
SELECT ...
UPDATE ...
-- Now we run method with PROPAGATION_REQUIRES_NEW
-- How do we "suspend" transaction so we can start new one?
START TRANSACTION
UPDATE ...
COMMIT
-- We returned from the method, result was commited
-- Now we'd like to "unsuspend" the original transaction so it can be commited/rollbacked, but how?
それとも、これは別の接続 (Session オブジェクト) を使用して実装されている可能性がありますか? 元の接続の使用を停止し、新しいトランザクションを開始できる新しい接続を作成しますか?
私はここで何かを見逃しているので、誰もそれを説明しようとはしません (少なくとも、Spring ドキュメント、Spring in Action、Hibernate を使用した Spring 永続性では)。
どうもありがとう!