Sobes.tech
Junior — Middle

Hogyan viselkedik a rendszer, ha egy tranzakciósnak jelölt módszeren belül egy másik, szintén tranzakciós annotációval ellátott módszert hívunk?

sobes.tech MI

Válasz az MI-től

Java-ban, amikor tranzakciókat használunk (például a @Transactional annotációval Spring-ben), akkor, ha egy tranzakcionális módszerben egy másik, szintén tranzakcionálisnak jelölt módszert hívunk, a viselkedés a proxy típusától és a tranzakciós beállításoktól függ.

Alapértelmezés szerint, ha a hívás ugyanabban az osztályban történik (belső módszerhívás), a proxy nem fogja ezt a hívást elfogni, és nem jön létre új tranzakció — a meglévő tranzakciót (ha van) használja.

Ha a hívás kívülről történik (proxy-n keresztül), akkor:

  • REQUIRED típusú propagáció esetén (alapértelmezett), nem jön létre belső tranzakció, a meglévőt használja.
  • REQUIRES_NEW esetén új tranzakció jön létre, amely felfüggeszti a meglévőt.

Így, ha egy tranzakcionális módszert hívunk egy másik tranzakcionális módszerből ugyanabban az osztályban, általában ugyanazt a tranzakciót használja, és a beágyazott annotáció nem hoz létre új tranzakciót.

Ha azt szeretné, hogy a belső módszer külön tranzakcióban fusson, a hívásnak proxy-n keresztül kell történnie (például, egy másik bean vagy ön-injektálás révén).