❓ Почему @Transactional не срабатывает при вызове метода внутри того же класса?
Потому что @Transactional работает через прокси. Spring оборачивает бин в прокси-объект, и транзакция открывается, когда вызов проходит через этот прокси извне.
Если же метод класса вызывает другой @Transactional-метод того же класса напрямую (this.method()), вызов идёт мимо прокси — аннотация просто игнорируется, транзакция не открывается. Это называется self-invocation.
Решения:
- вынести транзакционный метод в отдельный бин;
- инжектить ссылку на самого себя (self-injection) и вызывать через неё;
- переключиться на AspectJ-режим вместо проксей.
🐸 Библиотека собеса по Java
#spring
Post #1374
1.08K
- 👍 10
- 🔥 1
- 👏 1