Pregunta Datos de solo lectura a través de Spring + Hibernate


Noté que si quiero leer algunos datos y si no tengo un contexto de transacción no podré hacerlo porque

org.hibernate.HibernateException: no se encontró ninguna sesión para el hilo actual

Para leer datos, no se requiere una transacción normalmente.

Entonces, para que Spring administre la sesión, necesita tener una transacción incluso para operaciones de solo lectura como las que selecciona ...

¿No es eso una sobrecarga?

PD. No quiero abrir y cerrar sesión manualmente ...

Muchas gracias.


6
2018-03-13 21:26


origen


Respuestas:


@Transactional le dice a spring que abra y cierre una sesión, además de darle instrucciones para que comience y realice una transacción. Esto no es muy sencillo, pero así es como funciona. Entonces si no tienes @Transactional, ninguna sesión se abre Estas son sus opciones:

  • utilizar @Transactional(readOnly=true) - el objetivo es tener una transacción de solo lectura. Yo recomiendo ese
  • usar JPA EntityManager inyectado con @PersistenceContext. Abrirá una nueva sesión subyacente para cada invocación. No es una buena opción. Pero deberías considerar usar EntityManager con una transacción readOnly = true
  • Use un aspecto / interceptor / filtro adicional para abrir y cerrar la sesión. Eso sería difícil, y puede terminar confundido por la implementación de primavera del concepto de sesión actual de hibernate.

4
2018-03-13 21:31