Каков уровень изоляции по умолчанию для вложенных транзакций (вместо одновременных)? - PullRequest
0 голосов
/ 22 ноября 2018

Spring имеет 3 типичных распространения вложенных транзакций: REQUIRED, NEW и NESTED.Типы уровня изоляции всегда описываются в терминах параллельных транзакций.Но как насчет вложенного случая?Какова видимость по умолчанию изнутри наружу и наоборот и как влияет установка уровня изоляции на обоих?

Возможно, есть какое-то эмпирическое правило, например, «внешняя транзакция всегда видит изменения изнутри вне зависимости от типов изоляции или распространения» или «внутренняя может видеть изменения внешнего объекта только тогда, когда она установлена ​​как read_uncommited.Или его установить, как требуется, и т.д ..?

РЕДАКТИРОВАТЬ: я не говорю о реальных SQL-запросов, но контекст постоянства.Я имею в виду, если я создаю ресурс и читаю его в другой части модели вложенных транзакций, увижу ли я это изменение независимо от того, было ли оно действительно сохранено?Хорошим примером является транзакционный рабочий процесс, который выполняет транзакционные методы, использующие repository.save, repository.find ... и т. Д.

1 Ответ

0 голосов
/ 27 ноября 2018

Нет разделения между внутренней и внешней транзакцией.Единственная причина, по которой он существует, - это сохранение очков.Эта вещь просто позволяет вам откатить внутреннюю транзакцию без отката внешней транзакции. Документация гласит:

PROPAGATION_NESTED использует одну физическую транзакцию с несколькими точками сохранения, к которой он может откатиться. Такие частичные откаты позволяют внутренней области транзакции вызыватьоткат для своей области с внешней транзакцией, способной продолжить физическую транзакцию, несмотря на то, что некоторые операции были откатаны.Этот параметр обычно сопоставляется с точками сохранения JDBC, поэтому он работает только с транзакциями ресурсов JDBC.См. Spring's DataSourceTransactionManager.

UPD: Вы также можете найти :

Уровень изоляции транзакции.Применимо только к настройкам распространения REQUIRED или REQUIRES_NEW.

...