si alguien puede explicar qué hace esta anotación y cuándo exactamente la usamos:
@Transactional(propagation=Propagation.REQUIRED)
Gracias
si alguien puede explicar qué hace esta anotación y cuándo exactamente la usamos:
@Transactional(propagation=Propagation.REQUIRED)
Gracias
Respuestas:
Cuando la configuración de propagación es PROPAGATION_REQUIRED, se crea un ámbito de transacción lógica para cada método en el que se aplica la configuración. Cada uno de estos alcances de transacciones lógicas puede determinar el estado de solo reversión individualmente, con un alcance de transacción externo que es lógicamente independiente del alcance de transacción interno. Por supuesto, en el caso del comportamiento estándar PROPAGATION_REQUIRED, todos estos ámbitos se asignarán a la misma transacción física. Por lo tanto, un marcador de solo reversión establecido en el alcance de la transacción interna afecta la posibilidad de que la transacción externa se comprometa realmente (como era de esperar).
http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html
Si necesita una explicación para laicos del uso más allá de lo que se proporciona en Spring Docs
Considere este código ...
class Service {
@Transactional(propagation=Propagation.REQUIRED)
public void doSomething() {
// access a database using a DAO
}
}
Cuando se llama a doSomething (), sabe que tiene que iniciar una transacción en la base de datos antes de ejecutarla. Si la persona que llama de este método ya ha iniciado una transacción, este método utilizará esa misma transacción física en la conexión de base de datos actual.
Esta @Transactional
anotación proporciona un medio de decirle a su código cuando se ejecuta que debe tener una Transacción. No se ejecutará sin uno, por lo que puede suponer en su código que no se quedará con datos incompletos en su base de datos, o tendrá que limpiar algo si ocurre una excepción.
La gestión de transacciones es un tema bastante complicado, por lo que es de esperar que esta respuesta simplificada sea útil
@Transactional
a su capa de servicio, no hay más requisitos para agregar también @Transactional
a los métodos DAO que se llaman dentro de esa transacción.
doSomething()
invoca otro método anidado sin ninguna @transactional, ¿esta misma transacción se aplicará también a ese método de invocación?
En las aplicaciones Spring, si habilita el soporte de transacciones basadas en anotaciones usando <tx:annotation-driven/>
y anota cualquier clase / método con @Transactional (propagation = Propagation.REQUIRED) , Spring framework iniciará una transacción, ejecutará el método y confirmará la transacción. Si se produjo alguna RuntimeException, la transacción se revertirá.
En realidad propagation = Propagation.REQUIRED es el nivel de propagación predeterminado, no es necesario que lo mencione explícitamente.
Para más información: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations
Para comprender las diversas configuraciones y comportamientos transaccionales adoptados para la gestión de transacciones, como REQUIRED
, ISOLATION
etc., deberá comprender los conceptos básicos de la gestión de transacciones en sí.
Lea Gestión de transacciones para obtener más explicaciones.