Sobes.tech
Senior

Miks @Transactional meetod ei pruugi transaktsiooni luua?

sobes.tech AI

Vastus AI-lt

Meetod @Transactional annotatsiooniga võib mitmel põhjusel mitte luua tehingut:

  • Kui meetod kutsutakse otse sama klassi sees (ilma proxy'ta), siis Spring ei rakenda tehingut, kuna tehingud toimivad proxy'de kaudu.
  • Kui Spring konfiguratsioon ei sisalda tehingute tuge või annotatsioon ei ole tunnustatud.
  • Kui meetod on märgitud private või final, proxy ei saa seda üle kirjutada tehingu loomiseks.
  • Kui juba on aktiivne tehing ja praegune meetod on konfigureeritud propagation'iga, mis ei loo uut tehingut.

Näide probleemist sisemises klassi kutses:

@Service
public class MyService {
    @Transactional
    public void transactionalMethod() {
        // kood
    }

    public void caller() {
        transactionalMethod(); // tehingut ei loodud, kui kutsed on samast klassist
    }
}