si alguien puede explicar lo que hacer esta anotación y el momento exacto en que lo utilizan:@Transactional (propagación = Propagation.REQUIRED)
@Transactional(propagation=Propagation.REQUIRED)
Gracias
si alguien puede explicar lo que hacer esta anotación y el momento exacto en que lo utilizan:@Transactional (propagación = Propagation.REQUIRED)
@Transactional(propagation=Propagation.REQUIRED)
Gracias
Cuando el ajuste de propagación es PROPAGATION_REQUIRED, una operación lógica El alcance se crea para cada método sobre el que se aplica la configuración. Cada alcance de transacción lógica de este tipo puede determinar el estado de retrotracción individualmente, con un alcance de transacción externo que es lógicamente independiente del alcance de la transacción interna. 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 retroceso solo establecido en el alcance interno de la transacción afecta la posibilidad de la transacción externa de comprometerse realmente (como era de esperar).
http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html
En las aplicaciones de la primavera, si se habilita el soporte de transacciones basadas anotación utilizando <tx:annotation-driven/>
y anotar cualquier clase/método con @Transactional (propagación = Propagation.REQUIRED) continuación framework Spring comenzará una transacción y ejecuta el método y confirma la transacción. Si se produce una excepción RuntimeException, la transacción se retrotraerá.
En realidad propagation = Propagation.REQUIRED es el nivel de propagación por defecto, no necesita mencionarlo 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 los diferentes ajustes de transacciones y comportamientos adoptados para la gestión de transacciones, tales como REQUIRED
, etc. ISOLATION
que tendrá que entender los conceptos básicos de la propia gestión de transacciones.
Lea Trasaction management para obtener más información sobre la explicación.
Si necesita una explicación del uso laymans allá de lo previsto en el Spring Docs
Considere este código ...
class Service {
@Transactional(propagation=Propagation.REQUIRED)
public void doSomething() {
// access a database using a DAO
}
}
Cuando doSomething() se llama que sabe que tiene que iniciar una transacción en la base de datos antes de ejecutar. 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 la base de datos actual.
Esta anotación @Transactional
proporciona un medio para indicar 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 le quedarán datos incompletos en su base de datos, o tendrá que limpiar algo si ocurre una excepción.
gestión de transacciones es un tema bastante complicado, así que espero que esta respuesta simplificada es útil significa
hombre demasiado impresionante, gracias a la gran orientación .. –
Si a alguien le interesa, he publicado [respuesta de un laico similar al comparar PROPAGATION_REQUIRES_NEW, PROPAGATION_NESTED, PROPAGATION_REQUIRED] (http://stackoverflow.com/questions/25076718/spring-propagation-examples -in-laymans-terms/25083505 # 25083505) – Brad
si usa una configuración basada en proxy para declarar y acceder a la capa DAO, el método en la clase DAO también debe ser anotado con @Transactional. – Kurapika
primavera REQUIRED
comportamiento que el same transaction
se utilizará si hay un ya abierto transacción en el contexto de ejecución del método del Bean actual . Si hay ninguna transacción existente el contenedor de resorte será creará uno nuevo. Si se llaman múltiples métodos configurados como REQUIRED
de forma anidada, se les asignarán distintas transacciones lógicas, pero todos ellos compartirán la misma transacción física. En resumen, esto significa que si un método interno hace que una transacción se retrotraiga, el método externo no podrá confirmar y también revertirá la transacción
¿Has leído esto? http://static.springsource.org/spring/docs/2.5.x/reference/transaction.html#tx-propagation – Brad
Propagation.REQUIRED es el modo de propagación predeterminado de Transaction, por lo que no necesita establecerlo explícitamente. – tibtof