Sobes.tech
Senior

Proč metoda s @Transactional nemusí vytvořit transakci?

sobes.tech AI

Odpověď od AI

Metoda označená anotací @Transactional nemusí vytvořit transakci z několika důvodů:

  • Pokud je metoda volána přímo uvnitř stejné třídy (bez proxy), Spring transakci nepoužije, protože transakce fungují přes proxy.
  • Pokud konfigurace Spring neobsahuje podporu transakcí nebo anotace není rozpoznána.
  • Pokud je metoda označena jako private nebo final, proxy ji nemůže přepsat pro vytvoření transakce.
  • Pokud již existuje aktivní transakce a aktuální metoda je nakonfigurována s propagation, které nevytváří novou transakci.

Příklad problému s voláním uvnitř třídy:

@Service
public class MyService {
    @Transactional
    public void transactionalMethod() {
        // kód
    }

    public void caller() {
        transactionalMethod(); // transakce nebude vytvořena, pokud je volání uvnitř stejné třídy
    }
}