Senior
Kodėl metodas su @Transactional gali nesukurti transakcijos?
sobes.tech AI
Atsakymas iš AI
Metodas su anotacija @Transactional gali ne sukurti transakcijos dėl kelių priežasčių:
- Jei metodas kviečiamas tiesiogiai toje pačioje klasėje (be proxy), Spring ne taikys transakcijos, nes transakcijos veikia per proxy.
- Jei Spring konfigūracija neįtraukia transakcijų palaikymo arba anotacija nėra atpažįstama.
- Jei metodas pažymėtas kaip
privatearbafinal, proxy negalės jo perrašyti transakcijos kūrimui. - Jei jau egzistuoja aktyvi transakcija ir dabartinis metodas yra sukonfigūruotas su propagation, kuris nesukuria naujos transakcijos.
Pavyzdys problemos su kvietimu viduje klasės:
@Service
public class MyService {
@Transactional
public void transactionalMethod() {
// kodas
}
public void caller() {
transactionalMethod(); // transakcija nebus sukurta, jei kvietimas viduje tos pačios klasės
}
}