Краткий ответ, нет. Длинный ответ выглядит следующим образом.
Поддержка вложенных транзакций в Java зависит от различных переменных в игре.
Поддержка вложенных транзакций в JTA
Прежде всего, если вы используете JTA, дело за Менеджером транзакций для поддержки вложенных транзакций. Любая попытка начать транзакцию может привести к возникновению исключения NotSupportedException диспетчером транзакций (который не поддерживает вложенные транзакции), если попытка запустить новую транзакцию в потоке, который уже связан с транзакцией.
Из спецификации Java Transaction API 1.1:
3.2.1 Начало транзакции
Запускается метод TransactionManager.begin
глобальная транзакция и партнеры
контекст транзакции с
вызывающая тема. Если сделка
Менеджер реализации не
поддержка вложенных транзакций,
TransactionManager.begin
метод Throwsthe NotSupportedException
когда вызывающий поток уже
связанный с транзакцией.
Поддержка вложенных транзакций в JDBC
JDBC 3.0 представляет класс Savepoint , который более или менее похож на концепцию точек сохранения в базе данных. Точки сохранения должны быть инициализированы с использованием метода Connection.setSavepoint () , который возвращает экземпляр точки сохранения. Откат к этой точке сохранения можно выполнить позднее, используя метод Connection.rollback (Savepoint svpt) . Все это, конечно, зависит от того, используете ли вы драйвер, совместимый с JDBC 3.0, который поддерживает установку точек сохранения и откат к ним.
Влияние автоматической фиксации
По умолчанию все полученные подключения устанавливаются на автоматическую фиксацию, если только драйвер JDBC не обнаружил явного отклонения на этом фронте. Если эта функция включена, она автоматически исключает объем вложенных транзакций, поскольку все изменения, внесенные в базу данных через соединение, автоматически фиксируются при выполнении.
Если отключить функцию автоматической фиксации и выбрать явную фиксацию и откат транзакций, то фиксация транзакции всегда фиксирует все изменения, выполненные соединением, до этого момента времени. Обратите внимание, что изменения, выбранные для фиксации, не могут быть определены программистом - все изменения до этого момента выбираются для фиксации, независимо от того, были ли они выполнены тем или иным способом. Единственный выход - определить точки сохранения или взломать свой путь мимо драйвера JDBC - драйвер обычно фиксирует все изменения, выполненные соединением, связанным с потоком, поэтому запуск нового потока (это плохо) и получение нового соединения в нем часто дает новый контекст транзакции.
Возможно, вы также захотите проверить, как ваша платформа предлагает поддержку вложенных транзакций, особенно если вы изолированы от JDBC API или от запуска новых транзакций JTA самостоятельно.
На основании приведенного выше описания того, как поддержка вложенных транзакций может быть достигнута в различных сценариях, представляется, что откат в вашем коде откатит все изменения, связанные с объектом Connection.