Sobes.tech
Junior — Middle

Può spiegare cosa si intende per livelli di propagazione nella gestione delle transazioni?

sobes.tech AI

Risposta dell'AI

I livelli di propagazione nella gestione delle transazioni determinano come si comporta una transazione chiamando metodi che possono anch'essi essere transazionali. È importante capire se un metodo utilizzerà una transazione esistente, ne creerà una nuova o funzionerà senza transazione.

I principali livelli di propagazione in Spring (Java):

  • REQUIRED (predefinito): se esiste una transazione corrente, il metodo vi si unisce, altrimenti ne viene creata una nuova.
  • REQUIRES_NEW: crea sempre una nuova transazione, sospendendo quella corrente (se presente).
  • SUPPORTS: se esiste una transazione, il metodo vi lavora, altrimenti senza transazione.
  • NOT_SUPPORTED: il metodo viene sempre eseguito senza transazione, sospendendo quella corrente.
  • MANDATORY: il metodo deve essere eseguito in una transazione esistente, altrimenti viene sollevata un'eccezione.
  • NEVER: il metodo non deve essere eseguito in una transazione, altrimenti viene sollevata un'eccezione.
  • NESTED: se esiste una transazione, ne viene creata una annidata (punto di salvataggio), altrimenti una nuova.

Esempio:

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void saveData() {
    // questo metodo è sempre in una nuova transazione
}