openSession :- When you call SessionFactory.openSession, it always create new Session object afresh and give it to you.
Necesitas explícitamente al ras y cierre de sesión estos objetos. Como los objetos de sesión no son seguros para subprocesos, debe crear un objeto de sesión por solicitud en un entorno multiproceso y una sesión por solicitud en las aplicaciones web también.
getCurrentSession :- When you call SessionFactory. getCurrentSession, it will provide you session object which is in hibernate context and managed by hibernate internally. It is bound to transaction scope.
When you call SessionFactory. getCurrentSession , it creates a new Session if not exists , else use same session which is in current hibernate context. It automatically flush and close session when transaction ends, so you do not need to do externally.
If you are using hibernate in single threaded environment , you can use getCurrentSession, as it is faster in performance as compare to creating new session each time.
You need to add following property to hibernate.cfg.xml to use getCurrentSession method.
<session-factory>
<!-- Put other elements here -->
<property name="hibernate.current_session_context_class">
thread
</property>
</session-factory>
Muchas gracias, @gkamal. Miro el código en el documento [Abrir sesión en la vista] (http://community.jboss.org/wiki/OpenSessionInView). (Su enlace apunta a esos documentos). El autor sugiere el uso de filtros. En su código de filtro, no llama a 'openSession()' o 'close()'. Él solo llama a 'getCurrentSession()'. Supongo que establece 'current_session_context' en' thread'. Ahora creo que entiendo 'getCurrentSession()'. Sin embargo, no sé cuándo debería usar 'openSession()'. – wannik
Utilizará OpenSession si no desea que la sesión se vincule a ningún contexto. Hay algunas situaciones en las que necesitaría una sesión diferente, distinta de una vinculada al contexto (los Interceptores Hibernate tienen una limitación de que no puede usar la sesión original); en esos casos, usaría OpenSession en lugar de currentSession. OpenSession crea una nueva sesión que debe cerrar explícitamente. Por ejemplo, en un método DAO llamará a OpenSession: use la sesión y ciérrela. – gkamal
estoy usando getCurrentSession(); porque lo inicialicé en listener not filter está bien desde tu vista; Estoy usando mvc2 jsp servlet – shareef