Wie funktioniert die Aussetzung von Transaktionen im Frühjahr?

Meine Frage ist im Grunde die gleiche wie sie istHier, aber ich bin mit der Antwort nicht zufrieden, deshalb schreibe ich diese Frage.

Im Spring Framework-Handbuch wird angegeben, dass für PROPAGATION_REQUIRES_NEW die aktuelle Transaktion ausgesetzt wird. Wie ist das eigentlich umgesetzt? Ich weiß, dass die meisten Datenbanken keine verschachtelten Transaktionen unterstützen und nur eine Transaktion in einer Verbindung ausgeführt werden kann. Dies bedeutet, dass Sie die ursprüngliche Transaktion nicht einfach "nicht verwenden" und keine neue Transaktion starten können. Bevor Sie eine neue Transaktion starten, müssen Sie die ursprüngliche Transaktion festschreiben oder zurücksetzen.

Beispiel:

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?

Oder ist dies möglicherweise über eine andere Verbindung (Sitzungsobjekt) implementiert? Damit wir die ursprüngliche Verbindung nicht mehr verwenden und eine neue Verbindung erstellen, in der wir eine neue Transaktion starten können?

Mir fehlt hier etwas so offensichtliches, dass es niemand erklären möchte (zumindest nicht in Spring Docs, Spring in Action, Spring Persistence with Hibernate).

Danke vielmals!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage