Saltar al contenido

¿Cómo usar @Transactional con Spring Data?

Puede que se de el caso de que halles alguna incompatibilidad en tu código o trabajo, recuerda probar siempre en un entorno de testing antes subir el código al trabajo final.

Solución:

¿De qué se trata realmente tu pregunta? El uso de la @Repository anotación o @Transactional.

@Repository no es necesario en absoluto, ya que la interfaz que declara estará respaldada por un proxy que la infraestructura de Spring Data crea y activa para la traducción de excepciones de todos modos. Entonces, usar esta anotación en una interfaz de repositorio de Spring Data no tiene ningún efecto.

@Transactional – para el módulo JPA tenemos esta anotación en la clase de implementación que respalda el proxy (SimpleJpaRepository). Esto se debe a dos razones: primero, la persistencia y eliminación de objetos requiere una transacción en JPA. Por lo tanto, debemos asegurarnos de que se está ejecutando una transacción, lo que hacemos al tener el método anotado con @Transactional.

Métodos de lectura como findAll() y findOne(…) están usando @Transactional(readOnly = true) que no es estrictamente necesario pero desencadena algunas optimizaciones en la infraestructura de transacciones (estableciendo el FlushMode para MANUAL para permitir que los proveedores de persistencia salten potencialmente las comprobaciones sucias al cerrar el EntityManager). Más allá de eso, el indicador también se establece en la conexión JDBC, lo que provoca más optimizaciones en ese nivel.

Según la base de datos que utilice, puede omitir bloqueos de tablas o incluso rechazar operaciones de escritura que podría desencadenar accidentalmente. Por lo tanto, recomendamos usar @Transactional(readOnly = true) también para métodos de consulta que puede lograr fácilmente agregando esa anotación a su interfaz de repositorio. Asegúrate de agregar un simple @Transactional a los métodos de manipulación que podría haber declarado o redecorado en esa interfaz.

Creo que la pregunta es un poco más amplia y no se puede reducir a las anotaciones en la capa de acceso a datos. Necesitamos considerar toda la pila de la aplicación, las estrategias de transacción que queremos aplicar, etc. Hay un conjunto muy completo de artículos sobre este tema de Mark Richards en el sitio de IBM Developerworks. Puede encontrar el primero aquí: https://developer.ibm.com/articles/j-ts1/

Saludos

Deberías usar @Repository anotación

Esto es porque @Repository se usa para traducir su excepción de SQL no verificada a Spring Excpetion y la única excepción que debe tratar es DataAccessException

Comentarios y puntuaciones

Si entiendes que te ha sido útil nuestro post, sería de mucha ayuda si lo compartes con otros desarrolladores de esta forma contrubuyes a difundir nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *