Como se explica en esta publicación del foro , 1 y 2 están relacionados. Si configura hibernate.current_session_context_classun 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_contexta 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 nuevoSessionobjeto 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 nuevoSessionsi 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
getCurrentSessionmé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