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
}