Sobes.tech
Senior

Prečo metóda s @Transactional nemôže vytvoriť transakciu?

sobes.tech AI

Odpoveď od AI

Metóda s anotáciou @Transactional nemôže vytvoriť transakciu z niekoľkých dôvodov:

  • Ak je metóda volaná priamo v rámci tej istej triedy (bez proxy), Spring transakciu neaplikuje, pretože transakcie fungujú cez proxy.
  • Ak konfigurácia Spring neobsahuje podporu pre transakcie alebo anotácia nie je rozpoznaná.
  • Ak je metóda označená ako private alebo final, proxy ju nemôže prepísať na vytvorenie transakcie.
  • Ak už existuje aktívna transakcia a aktuálna metóda je nakonfigurovaná s propagation, ktoré nevytvára novú transakciu.

Príklad problému s volaním vnútri triedy:

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

    public void caller() {
        transactionalMethod(); // transakcia nebude vytvorená, ak je volanie v tej istej triede
    }
}