Sobes.tech
Middle

Hogyan befolyásolja a @Transactional jelöléssel ellátott nyilvános metódus hívása, amely egy @Transactional és REQUIRES_NEW paraméterrel ellátott privát metódust hív meg?

sobes.tech MI

Válasz az MI-től

Springben az @Transactional annotáció proxy-kon keresztül működik, amelyek elfogják a metódushívásokat. Amikor egy nyilvános, @Transactional-nal ellátott metódus hívódik meg, a tranzakció a beállítások szerint jön létre vagy használódik.

Azonban, ha ezen a metóduson belül egy @Transactional(propagation = REQUIRES_NEW) jelölt privát metódus hívódik meg, akkor a privát metóduson lévő annotáció nem fog működni, mert a hívás közvetlenül ugyanabban az osztályban történik, proxy nélkül.

Ezért a REQUIRES_NEW paraméter a privát metóduson nem fog új tranzakciót létrehozni, és az összes kód egyetlen tranzakció keretében fog végrehajtódni, amely a nyilvános metódus számára nyitva van.

Ha azt szeretné, hogy a REQUIRES_NEW működjön, a privát metódust proxy-n keresztül kell meghívni, például egy másik bean-ből vagy ön-injektálással.