Propagación en transacciones
##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:
Es la propagación default. El método marcado con @Transactional se ejecuta dentro de la transacción actual, si no existe crea una.
El método marcado con @Transactional se ejecuta en una nueva transacción, la transaccion actual la suspende.
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.