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