Автокоммит и весенние декларативные сделки - PullRequest
0 голосов
/ 22 ноября 2010

У меня есть один метод обслуживания, помеченный Propagation.Required.Он выполняет три отдельные операции.

  1. Вставить в таблицу 1 из таблицы z, если в таблице 1 нет записей *
  2. Вставить / обновить таблицу 1 в соответствии с изменениями / дополнениями пользователя
  3. Удалить x записей изтаблица 1

Простите мое невежество, но разве все это не должно выполняться за одну транзакцию?В том смысле, если третий запрос переходит в исключение, разве не должен быть первый и второй откат?Это не происходит в моем случае.Повлияет ли параметр автоматической фиксации hibernate на границы txn каким-либо образом?В моем случае для автоматической фиксации установлено значение true.Мне требуется, чтобы фиксация выполнялась в любой из этих таблиц, только если все они успешны.

Ответы [ 3 ]

1 голос
/ 22 ноября 2010

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

0 голосов
/ 30 декабря 2010

Да, настройка свойства Hibernate connection.autocommit повлияет на границы транзакций.

Если вы установите это значение true, Hibernate переведет базовое соединение JDBC в режим автоматической фиксации, что обернет каждую выполняемую вами инструкцию в свою собственную транзакцию базы данных.

Так, например, если ваш третий запрос / оператор потерпит неудачу, откроется только ваш третий запрос / оператор.

Чтобы выполнить все три как один блок, вам нужно отключить автокоммит и выполнить все три в контексте одной транзакции, декларативной или другой.

0 голосов
/ 22 ноября 2010

Вы определенно не хотите, чтобы автокоммит был включен. Это, вероятно, будет совершаться после каждой операции. Выключите автокоммит и добавьте явный коммит в конце.

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