Estoy usando Hibernate con Spring en Tomcat. He estado leyendo y volviendo a leer el tema señalado como JBoss wiki page sobre el tema, y eso ha sido útil. Pero me deja algunas preguntas.Hibernate Sesión abierta en vista: ¿transacción por solicitud?
La idea de iniciar una transacción para cada solicitud me preocupa. Creo que podría limitar el filtro a ciertos controladores, tal vez poner todos mis controladores que necesiten una transacción bajo una ruta pseudo "tx" o algo así. ¿Pero no es una mala idea usar transacciones si no sabes si vas a necesitar una? Y si solo estoy haciendo lecturas en alguna solicitud, dice que muy probablemente provenga de un caché, ¿no estoy mejor sin una transacción?
He leído publicaciones que mencionan cómo manejaron las transacciones en la capa de servicio, y me gustaría hacer esto con Spring. Pero entonces, ¿cómo se ve el código de filtro? Todavía quiero que la sesión esté disponible en mi vista para una carga diferida.
Si todo lo que tengo que hacer es llamar al
sessionFactory.getCurrentSession()
en mi filtro, ¿cómo se "libera" de nuevo a la fábrica de sesiones para su reutilización? (Esperaba ver unsession.close()
o algo así, incluso cuando usaba transacciones). ¿Quién le está diciendo a la fábrica de sesiones que esa sesión puede reutilizarse?¿Quizás es la llamada
beginTransaction()
que vincula una conexión de base de datos dada a una sesión dada durante la duración de una solicitud? De lo contrario, una sesión extrae las conexiones de DB de la agrupación según sea necesario, ¿verdad?
Gracias por su paciencia con todas mis preguntas.
(Y si tu respuesta va a ser un enlace a la documentación de Spring, me harás llorar. No quieres eso, ¿verdad? Pagaré dinero real si la gente deja de responder a Spring preguntas relacionadas de esa manera.)
He estado yendo de aquí para allá y luego hasta allí, omitiendo la web sobre este tema durante una semana ... y esa es la primera vez que he leído que Spring tiene un filtro OpenSessionInView. Gracias. – Marvo
Hombre, eso simplemente funciona muy bien. ¡Gracias! – Marvo
Siempre pensé que funcionaría como una transacción. Pero realmente la transacción está limitada por @Transactional de primavera. Gracias por la explicación. –