Senior
Kāpēc metode ar @Transactional var nesaglabāt transakciju?
sobes.tech AI
Atbilde no AI
Metode ar anotāciju @Transactional var nepievienot transakciju vairāku iemeslu dēļ:
- Ja metode tiek izsaukta tieši tajā pašā klasē (bez proxy), Spring nepiemēsīs transakciju, jo transakcijas darbojas caur proxy.
- Ja Spring konfigurācija neiekļauj transakciju atbalstu vai anotācija netiek atpazīta.
- Ja metode ir atzīmēta kā
privatevaifinal, proxy to nevar pārrakstīt, lai izveidotu transakciju. - Ja jau pastāv aktīva transakcija un pašreizējā metode ir konfigurēta ar propagation, kas neizveido jaunu transakciju.
Piemērs ar problēmu iekšējā klases izsaukumā:
@Service
public class MyService {
@Transactional
public void transactionalMethod() {
// kods
}
public void caller() {
transactionalMethod(); // transakcija netiks izveidota, ja izsaukums ir tajā pašā klasē
}
}