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
privateilifinal, 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
}
}