Como se explica en esta publicación del foro , 1 y 2 están relacionados. Si configura hibernate.current_session_context_class
un subproceso y luego implementa algo como un filtro de servlet que abre la sesión, puede acceder a esa sesión en cualquier otro lugar utilizando el SessionFactory.getCurrentSession()
.
SessionFactory.openSession()
siempre abre una nueva sesión que debe cerrar una vez que haya terminado con las operaciones. SessionFactory.getCurrentSession()
devuelve una sesión vinculada a un contexto; no es necesario que cierre esto.
Si está utilizando Spring o EJB para administrar transacciones, puede configurarlas para abrir / cerrar sesiones junto con las transacciones.
Nunca debe usar one session per web app
, la sesión no es un objeto seguro para subprocesos, no puede ser compartida por múltiples subprocesos. Siempre debe usar "una sesión por solicitud" o "una sesión por transacción"
openSession()
oclose()
. El solo llamagetCurrentSession()
. Supongo que se ponecurrent_session_context
a ellothread
. Ahora creo que entiendogetCurrentSession()
. Sin embargo, no sé cuándo debo usaropenSession()
.Sessions
. ¿Me pueden ayudar con esto en stackoverflow.com/questions/23351083/… . Gracias y chenqui.Si hablamos de SessionFactory.openSession ()
Y si hablamos de SessionFactory.getCurrentSession ()
fuente
getCurrentSession
, reutilizaría la misma sesión, ¿no?openSession
: Cuando llamasSessionFactory.openSession
, siempre crea un nuevoSession
objeto y te lo da.Debe vaciar y cerrar explícitamente estos objetos de sesión.
Como los objetos de sesión no son seguros para subprocesos, debe crear un objeto de sesión por solicitud en un entorno de subprocesos múltiples y también una sesión por solicitud en aplicaciones web.
getCurrentSession
: Cuando llameSessionFactory.getCurrentSession
, le proporcionará un objeto de sesión que se encuentra en contexto de hibernación y administrado por hibernate internamente. Está sujeto al alcance de la transacción.Cuando llama
SessionFactory.getCurrentSession
, crea un nuevoSession
si no existe, de lo contrario use la misma sesión que está en el contexto de hibernación actual. Se descarga y cierra la sesión automáticamente cuando finaliza la transacción, por lo que no es necesario que lo haga externamente.Si está utilizando hibernación en un entorno de subproceso único, puede usarlo
getCurrentSession
, ya que es más rápido en rendimiento en comparación con la creación de una nueva sesión cada vez.Debe agregar la siguiente propiedad a hibernate.cfg.xml para usar el
getCurrentSession
método:fuente
fuente
SessionFactory: "One SessionFactory por aplicación por DataBase" (por ejemplo, si usa 3 DataBase's en nuestra aplicación, debe crear un objeto sessionFactory por cada DB, totalmente necesita crear 3 sessionFactorys. O bien si solo tiene una DataBase One sessionfactory es suficiente ).
Sesión: "Una sesión para un ciclo de solicitud-respuesta". puede abrir la sesión cuando llegó la solicitud y puede cerrar la sesión después de completar el proceso de solicitud. Nota: -No use una sesión para la aplicación web.
fuente