Sobes.tech
Senior

Por que o método com @Transactional pode não criar uma transação?

sobes.tech IA

Resposta da IA

Um método com a anotação @Transactional pode não criar uma transação por várias razões:

  • Se o método for chamado diretamente dentro da mesma classe (sem proxy), o Spring não aplicará a transação, pois as transações funcionam através de proxies.
  • Se a configuração do Spring não incluir suporte para transações ou se a anotação não for reconhecida.
  • Se o método estiver marcado como private ou final, o proxy não poderá sobrescrevê-lo para criar uma transação.
  • Se já existir uma transação ativa e o método atual estiver configurado com propagation, que não cria uma nova transação.

Exemplo de problema com a chamada dentro da classe:

@Service
public class MyService {
    @Transactional
    public void transactionalMethod() {
        // código
    }

    public void caller() {
        transactionalMethod(); // a transação não será criada se a chamada for dentro da mesma classe
    }
}