Sobes.tech
Senior

Zašto metoda sa @Transactional može da ne kreira transakciju?

sobes.tech АИ

Одговор од АИ

Metoda sa anotacijom @Transactional može iz više razloga da ne kreira transakciju:

  • Ako se metoda poziva direktno unutar iste klase (bez proxy-ja), Spring neće primeniti transakciju, jer transakcije funkcionišu putem proxy-ja.
  • Ako konfiguracija Spring-a ne uključuje podršku za transakcije ili anotacija nije prepoznata.
  • Ako je metoda označena kao private ili final, proxy je ne može prepisati za kreiranje transakcije.
  • Ako već postoji aktivna transakcija i trenutna metoda je konfigurisana sa propagation-om koji ne kreira novu transakciju.

Primer problema sa pozivom unutar klase:

@Service
public class MyService {
    @Transactional
    public void transactionalMethod() {
        // kod
    }

    public void caller() {
        transactionalMethod(); // transakcija neće biti kreirana ako je poziv unutar iste klase
    }
}