Como funciona a suspensão de transações no Spring?

Minha pergunta é basicamente a mesma que éAqui, mas não estou satisfeito com a resposta, então estou escrevendo esta pergunta.

No manual do Spring Framework, afirma-se que, para um PROPAGATION_REQUIRES_NEW, a transação atual será suspensa. Como isso é realmente implementado? Eu sei que a maioria dos bancos de dados não suporta transações aninhadas e pode ter apenas uma transação em execução em uma conexão. Isso significa que você não pode simplesmente "não usar" a transação original e iniciar uma nova - antes de iniciar uma nova transação, você deve confirmar ou reverter a transação original.

Exemplo:

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?

Ou isso é possivelmente implementado usando outra conexão (objeto de sessão)? Então paramos de usar a conexão original e criamos uma nova onde podemos iniciar uma nova transação?

Eu estou perdendo aqui algo tão óbvio que ninguém se importa em explicar (pelo menos não em docs Spring, Spring in Action, Spring persistence com Hibernate).

Muito obrigado!

questionAnswers(1)

yourAnswerToTheQuestion