Вложенная транзакция с использованием Spring и Hibernate - PullRequest
5 голосов
/ 23 августа 2011

В моем приложении есть несколько шагов, в которых много коммитов в базу данных будут выполняться последовательно несколькими способами.Пример:

A -> B -> C
       -> D
           ->E
       -> F
  -> G

A вызывает B, который вызывает C. Затем B вызывает D. D вызывает E и так далее.Все эти методы имеют некоторые операции с базой данных.Как я понимаю из PROPAGATION_REQUIRED (декларативное управление транзакциями - рекомендуемый весной способ), если E завершится успешно, транзакция (и операции в E будут зафиксированы).Теперь, из-за какого-то исключения, F должен привести к откату.Я хочу получить откат всего , начиная с того, что сделал A .Это возможно через декларативное управление транзакциями?Или я должен использовать Programmatic Transaction Management?

Спасибо.

1 Ответ

7 голосов
/ 23 августа 2011

Во-первых, «вложенные» транзакции, в том смысле, что существует несколько запущенных транзакций, зависящих друг от друга, не поддерживаются, afaik.

Тогда propagation=REQUIRED означает, что все методы с таким распространением будут:

  • начать новую транзакцию, если ее не существует
  • участвовать в существующей транзакции, если таковая существует.

Это означает, что в вашем сценарии сбой в F приведет к откату всей транзакции (поскольку это отдельная транзакция, запущенная A и распространенная на другие методы)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...