Sobes.tech
Junior — Middle

Ako sa správa systém, ak sa vnútri transakčnej metódy volá iná metóda, ktorá je tiež označená transakčnou anotáciou?

sobes.tech AI

Odpoveď od AI

У Јави, када користите трансакције (на пример, са анотацијом @Transactional у Spring-у), понашање када се позове друга метода означена као трансакциона зависи од типа проксија и подешавања трансакција.

По подразумеваној вредности, ако позив долази унутар исте класе (интерни позив методе), прокси не пресреће тај позив и не креира се нова трансакција — користи се тренутна трансакција (ако постоји).

Ако позив долази споља (преко проксија), онда:

  • Са propagation типа REQUIRED (по подразумеваној вредности), не креира се унутрашња трансакција, користи се постојећа.
  • Са propagation REQUIRES_NEW, креира се нова трансакција, суспендовајући тренутну.

Тако, при позиву трансакционе методе из друге трансакционе методе у истој класи, обично се користи иста трансакција, а унутрашња анотација не креира нову трансакцију.

Ако желите да се унутрашња метода извршава у посебној трансакцији, позив мора ићи преко проксија (нпр. преко другог бина или преко self-injection).