Sobes.tech
Junior — Middle

Kā uzvedas sistēma, ja transakcijas metode iekšā tiek izsaukta cita metode, arī ar transakcijas anotāciju?

sobes.tech AI

Atbilde no AI

Java, izmantojot transakcijas (piemēram, ar @Transactional anotāciju Spring), uzvedība, kad iekšā tiek izsaukta cita metode, kas arī ir marķēta kā transakcijas metode, ir atkarīga no proxy veida un transakciju iestatījumiem.

Pēc noklusējuma, ja izsaukums notiek tajā pašā klasē (iekšējais metodes izsaukums), proxy šo izsaukumu neķer un netiek izveidota jauna transakcija — tiek izmantota esošā transakcija (ja tāda ir).

Ja izsaukums notiek no ārpuses (caur proxy), tad:

  • Ar REQUIRED propagation tipu (noklusējuma), iekšējā transakcija netiek izveidota, tiek izmantota esošā.
  • Ar REQUIRES_NEW propagation tiek izveidota jauna transakcija, apturot esošo.

Tādējādi, izsaucot transakcijas metodi no citas transakcijas metodes tajā pašā klasē, parasti tiek izmantota tā pati transakcija, un iekšējā anotācija neizveido jaunu transakciju.

Ja vēlaties, lai iekšējā metode darbotos atsevišķā transakcijā, izsaukumam jānotiek caur proxy (piemēram, caur citu bean vai caur self-injection).