Sobes.tech
Senior

Miért nem hoz létre tranzakciót az @Transactional módszer?

sobes.tech MI

Válasz az MI-től

Az @Transactional annotációval ellátott módszer több okból is nem hozhat létre tranzakciót:

  • Ha a módszert közvetlenül ugyanabban a osztályban hívják meg (proxy nélkül), akkor a Spring nem alkalmazza a tranzakciót, mivel a tranzakciók proxykon keresztül működnek.
  • Ha a Spring konfiguráció nem tartalmaz tranzakciós támogatást vagy az annotációt nem ismeri fel.
  • Ha a módszer private vagy final jelöléssel van ellátva, a proxy nem tudja felülírni a tranzakció létrehozásához.
  • Ha már létezik aktív tranzakció, és az aktuális módszer konfigurálva van propagation-nel, amely nem hoz létre új tranzakciót.

Példa problémára a belső osztályhívásnál:

@Service
public class MyService {
    @Transactional
    public void transactionalMethod() {
        // kód
    }

    public void caller() {
        transactionalMethod(); // nem fog tranzakciót létrehozni, ha ugyanabban az osztályban hívják
    }
}