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
privatevagyfinaljelö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
}
}