iberck
3/17/2015 - 4:40 AM

Propagation levels

Propagación en transacciones

Propagation

##Transacciones lógicas y físicas

Las transacciones físicas son las creadas a nivel de base de datos.

Las transacciones lógicas son las creadas por spring.

Cuando el nivel de propagación es PROPAGATION_REQUIRED (default), solo existe una transacción física por lo tanto spring crea una transacción lógica por cada método marcado con @Transactional(propagation=PROPAGATION_REQUIRED). Cada transacción lógica cuenta con el atributo rollback-only, el cual afecta a sus transacciones externas de tal forma que si alguna transacción asigna setRollbackOnly=true las transacciones asociadas no podrán hacer commit:

PROPAGATION_REQUIRED

Es la propagación default. El método marcado con @Transactional se ejecuta dentro de la transacción actual, si no existe crea una.

Diagrama

PROPAGATION_REQUIRES_NEW

El método marcado con @Transactional se ejecuta en una nueva transacción, la transaccion actual la suspende.

Diagrama

PROPAGATION_NESTED

Utiliza una sola transacción con múltiples puntos de ruptura a los que se les puede hacer rollback. Se mapea contra los savepoints de jdbc por lo que solo trabaja con JDBC Resource transactions.