AutoCommit и Spring декларативные транзакции
-
27-09-2019 - |
Вопрос
У меня есть один способ обслуживания, аннотированный с Propagation.Required
. Отказ Он выполняет три отдельных операции.
- Вставьте в таблицу 1 из таблицы Z, если записи не находятся в таблице 1
- Вставьте / Обновить таблицу 1 в соответствии с изменениями пользователя / дополнения
- Удалить записи X из таблицы 1
Прости мое невежество, но не все эти беги под одной транзакцией? В том смысле, если третий запрос работает в исключение, не должен также первый и второй откат тоже? Это не происходит в моем случае. Установка Hibernate Auto Compart Compate влияет на границы TXN в любом случае? Автоматический коммит устанавливается в True в моем случае. То, что мне требуется, является обязательством, должно происходить в любой из этих таблиц, только если все успешно.
Решение
Да, гибернат connection.autocommit
Настройка свойства повлияет на границы транзакции.
Если вы установите это на true
, Hibernate поставит базовое соединение JDBC в режиме AutoCommit, который будет обернуть каждое утверждение, которое вы выполняете в собственном транзакции базы данных.
Таким образом, например, если ваш третий запрос / оператор не удается, только ваш третий запрос / оператор откатывается назад.
Чтобы выполнить все три в качестве одного устройства, вам необходимо выключить и выполнить все три в контексте одной транзакции, декларативной или иным образом.
Другие советы
Не могли бы вы попытаться добавить еще один слой выше, чем сервисный слой и начните оттуда транзакции.
Вы определенно не хотите автозовать. Это, вероятно, посвящено после каждой операции. Выключите автопробук выкл и добавьте явную коммит в конце.