Вопрос

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

  1. Вставьте в таблицу 1 из таблицы Z, если записи не находятся в таблице 1
  2. Вставьте / Обновить таблицу 1 в соответствии с изменениями пользователя / дополнения
  3. Удалить записи X из таблицы 1

Прости мое невежество, но не все эти беги под одной транзакцией? В том смысле, если третий запрос работает в исключение, не должен также первый и второй откат тоже? Это не происходит в моем случае. Установка Hibernate Auto Compart Compate влияет на границы TXN в любом случае? Автоматический коммит устанавливается в True в моем случае. То, что мне требуется, является обязательством, должно происходить в любой из этих таблиц, только если все успешно.

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top