Re[13]: Вложенные транзакции
От: Blazkowicz Россия  
Дата: 15.04.15 13:18
Оценка:
Здравствуйте, sgp, Вы писали:

sgp>Уровень изоляции SERIALIZABLE не допускает одновременное изменение одного поля одной записи двумя конкурирующими транзакциями.

Это верно.

sgp>Если такое случается, то одна из транзакций должна быть откачена. В моем случае используется Oracle. Абсолютно точно так ведет себя Postgres и Sybase. Похожим образом должны вести себя и другие СУБД.

А это верно лишь от части. Если БД удалось "сериализовать" транзакции — выполнить их последовательно, то ничего откатывать и не нужно.

sgp>Если я ручками открываю 2 сессии к БД и в пошаговом режиме выполняю чтение и обновление записей, то почему я должен сомневаться в том, что транзакции конкурентны?

Сложный вопрос. Но исключать такого хода событий тоже нельзя, иначе поведение Spring шло бы в разрез с мануалом. Поэтому я полагаю что БД разрулила обе транзакции.
Re: Вложенные транзакции
От: vsb Казахстан  
Дата: 15.04.15 13:32
Оценка:
Я советую или включить логи на стороне БД или использовать логгирование в драйвере. Могу посоветовать библиотечку com.googlecode.usc.jdbcdslog. Можно будет отследить всё, что происходит с транзакциями, откатами и т.д.

Даже в случае с вложенными транзакциями при откате внешней транзакции должны откатываться внутренние. Поведение в вашем примере ненормально и скорее всего проблема в настройке спринга.

Вложенные транзакции уж точно не должны применяться по умолчанию в Spring Data. Это абсолютно ненужный оверхед. Да и в принципе штука достаточно экзотическая.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.