@Transactional (propagation = Propagation.REQUIRED)

si alguien puede explicar lo que hace esta anotación y cuándo la usamos exactamente:

@Transactional(propagation=Propagation.REQUIRED) 

Gracias

Cuando la configuración de propagación es PROPAGATION_REQUIRED, se crea un scope de transacción lógica para cada método sobre el cual se aplica la configuración. Cada scope de transacción lógica de este tipo puede determinar el estado de retrotracción individualmente, con un scope de transacción externo que es lógicamente independiente del scope 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 scope interno de la transacción afecta la posibilidad de la transacción externa de comprometerse realmente (como era de esperar).

enter image description here

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html

Si necesita una explicación de laymans del uso más allá de lo previsto en los Documentos de Spring

Considera 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 ejecutar. Si la persona que llama de este método ya ha iniciado una Transacción, este método usará esa misma Transacción física en la conexión de la base de datos actual.

Esta anotación @Transactional proporciona un medio para @Transactional 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 le quedarán 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 espero que esta respuesta simplificada sea útil

En aplicaciones de Spring, si habilita el soporte de transacciones basado en anotaciones usando y anota cualquier clase / método con @Transactional (propagation = Propagation.REQUIRED) entonces Spring framework iniciará una transacción y ejecutará el método y confirmará el 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 predeterminado, no es necesario que lo menciones 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

El comportamiento de Spring REQUIRED significa que se utilizará la same transaction si ya hay una transacción abierta en el contexto de ejecución del método de bean actual. Si no hay una transacción existente, el contenedor Spring creará uno nuevo . Si se llaman múltiples métodos configurados como comportamientos REQUIRED forma anidada, se les asignarán distintas transacciones lógicas, pero todos compartirán la misma transacción física . En resumen, esto significa que si un método interno hace que una transacción se deshaga, el método externo no se comprometerá y también revertirá la transacción.

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.

Lea la gestión de Trasaction para más información sobre la explicación.