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
privatevõifinal, 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
}
}