Sobes.tech
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ā private vai final, 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ē
    }
}