Jak działa zawieszenie transakcji na wiosnę?

Moje pytanie jest zasadniczo takie samo jak totutaj, ale nie jestem zadowolony z odpowiedzi, więc piszę to pytanie.

W podręczniku Spring Framework stwierdzono, że dla PROPAGATION_REQUIRES_NEW bieżąca transakcja zostanie zawieszona. Jak to faktycznie jest realizowane? Wiem, że większość baz danych nie obsługuje zagnieżdżonych transakcji i może działać tylko jedna transakcja w jednym połączeniu. Oznacza to, że nie możesz po prostu „nie używać” oryginalnej transakcji i rozpoczynać nowej - przed rozpoczęciem nowej musisz zatwierdzić lub wycofać oryginalną transakcję.

Przykład:

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?

Czy jest to możliwe za pomocą innego połączenia (obiekt Session)? Abyśmy przestali korzystać z oryginalnego połączenia i stworzyli nowe, w którym możemy rozpocząć nową transakcję?

Brakuje mi tutaj czegoś tak oczywistego, że nikt nie chce tego wyjaśnić (przynajmniej nie w Spring docs, Spring in Action, Spring persistence with Hibernate).

Wielkie dzięki!

questionAnswers(1)

yourAnswerToTheQuestion