Когда вы вызываете метод вне @Transactional
блока транзакции, родительская транзакция перейдет к новому методу. Он будет использовать то же соединение из родительского метода (с @Transactional
) и любое исключение, вызванное в вызываемом методе (без этого @Transactional
будет откат транзакции, как настроено в определении транзакции.
Если вы вызываете метод с @Transactional
аннотацией из метода @Transactional
в том же экземпляре, то транзакционное поведение вызываемых методов не будет иметь никакого влияния на транзакцию. Но если вы вызываете метод с определением транзакции из другого метода с определением транзакции, и они находятся в разных экземплярах, то код в вызываемом методе будет следовать определениям транзакции, данным в вызываемом методе.
Более подробную информацию можно найти в разделе « Декларативное управление транзакциями» документации по весенним транзакциям .
Модель декларативной транзакции Spring использует прокси AOP. Таким образом, за создание транзакций отвечает AOP-прокси. Прокси-сервер AOP будет активен только в том случае, если методы, содержащиеся в экземпляре, вызываются извне экземпляра.