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:
REQUIREDtípusú propagáció esetén (alapértelmezett), nem jön létre belső tranzakció, a meglévőt használja.REQUIRES_NEWeseté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).