И когда использование NESTED может неожиданно упасть?
REQUIRES_NEW — полностью приостанавливает текущую транзакцию и открывает новую, независимую. Свой коннект к БД, свой коммит и роллбэк. Внешняя транзакция об этом не знает.
NESTED — работает внутри той же транзакции через savepoint. Если вложенный метод откатится — откат только до savepoint'а, внешняя транзакция продолжает жить. Один коннект, один итоговый коммит.
⚠️ Когда NESTED неожиданно падает
1. JPA + Hibernate
JpaTransactionManager не поддерживает savepoints из коробки — получишь NestedTransactionNotSupportedException. Нужна явная донастройка, и то ненадёжно.
2. База не умеет savepoints
MySQL с движком MyISAM, некоторые конфигурации H2 — savepoints просто не поддерживаются на уровне драйвера.
3. Self-invocation
// proxy не задействован → NESTED полностью игнорируется
this.nestedMethod();
🐸 Библиотека собеса по Java
#spring