Почему аннотация @Transactional игнорируется при вызове метода из того же класса в Spring Boot? [дубликат]JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему аннотация @Transactional игнорируется при вызове метода из того же класса в Spring Boot? [дубликат]

Сообщение Anonymous »

Я работаю над проектом Spring Boot и столкнулся со странным поведением аннотации @Transactional.
У меня есть класс обслуживания, в котором один общедоступный метод вызывает другой метод в том же классе. Я заметил, что если второй метод имеет @Transactional, транзакция не создается и изменения в базе данных не откатываются при возникновении исключения.
Вот упрощенная версия моего Java-кода:

Код: Выделить всё

@Service
public class UserService {

public void myMethod1() {
// ...

myMethod2();
}

@Transactional
public void myMethod2() {
// ...
}
}
Однако, если я вызываю myMethod2() непосредственно из контроллера или другой службы, транзакция работает отлично и откатывается, как ожидалось.
Мои вопросы:
  • Почему Spring игнорирует @Transactional, когда вызов является внутренним (самовызов)?
  • Что такое рекомендуемый способ справиться с этим, если мне все еще нужно сохранить логику в одной службе? Является ли перенос его в другой сервис единственным «чистым» решением?
Я немного читал о Spring AOP и прокси-серверах, но не могу понять, почему он не может перехватывать вызовы, сделанные внутри одного и того же объекта.

Подробнее здесь: https://stackoverflow.com/questions/798 ... thin-the-s
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»