Me gustaría entender el uso de tener una transacción de primavera con soportes de propagación. Los documentos Java mencionan que si el método que tiene @Transactional(propagation = Propagation.SUPPORTS)
se llama desde dentro de una transacción, admite la transacción, pero si no existe ninguna transacción, el método se ejecuta de forma no transaccional.Transacciones de muelles con propagación de apoyos
¿No es este el comportamiento de las transacciones de primavera independientemente de Propagation.SUPPORTS
?
public class ServiceBean {
@Transactional(propagation = Propagation.SUPPORTS)
public void methodWithSupportsTx() {
//perform some database operations
}
}
public class OtherServiceBean {
@Transactional(propagation = Propagation.REQUIRED)
public void methodWithRequiredTx() {
//perform some database operations
serviceBean.methodWithSupportsTx();
}
}
En el ejemplo de código anterior, con independencia de si tiene methodWithSupportsTx()
@Transactional(propagation = Propagation.SUPPORTS)
anotación que sería ejecutado en una transacción en función de si tiene methodWithRequiredTx()
@Transactional
anotación, ¿verdad?
¿Cuál es la necesidad/uso de tener un nivel de propagación SOPORTES?
No lo creo. Se produce un error solo cuando el nivel de propagación es NUNCA. También PROPAGATION.SUPPORTS no crea una nueva transacción. –