差异b/w Hibernate的Sessionfactory.getCurrentSession()和SessionFactory.openSession()

tin*_*tin 18 java orm persistence hibernate

我两者之间有点困惑.据我所知,两者都返回hibernate会话,SessionFactory.getCurrentSession()返回基于<property name="current_session_context_class">hibernate.cfg.xml中设置的属性的上下文会话我们不应该总是采用这种方法吗?

增加了什么附加价值SessionFactory.openSession()

Har*_*hra 38

无论何时sf.getCurrentSession()第一次调用,都会打开一个会话.如果一个会话不存在,则会创建一个全新的会话,如果已存在,则会使用现有会话.

在Tomcat中,这会将会话与使用基础ThreadLocal对象创建的线程相关联.但是由于Tomcat使用线程池,因此完全有可能请求可能会收到一个已经与之关联的会话的线程,从而引入甚至不创建全新会话的可能性.另一件事是您获得的会话sf.getCurrentSession()被自动刷新和关闭.

sf.openSession()另一方面,该方法创建一个新会话,但不会尝试将其与一个线程相关联.但是请记住sf.openSession()引入另一个障碍,它希望用户自己处理会话的关闭和刷新,而不是让Hibernate自动为我们做.

sf.getCurrentSession()通常就足够了.sf.openSession()提供并促进对会话存储和管理的更高级别的管理.这当然是一个先进的选择.