我对两者有些困惑。据我所知,这两个方法都返回休眠会话,SessionFactory.getCurrentSession()
并基于<property name="current_session_context_class">
hibernate.cfg.xml中设置的属性返回上下文会话,我们不应该总是使用这种方法吗?
附加值是SessionFactory.openSession()
多少?
每当sf.getCurrentSession()
首次调用时,都会打开一个会话。如果一个会话不存在,这将创建一个全新的会话;如果已经存在,则使用一个现有的会话。
在Tomcat中,这将会话与使用基础ThreadLocal
对象创建的线程相关联。但是,由于Tomcat使用线程池,因此完全有可能一个请求接收到一个线程,该线程具有已经与该会话关联的会话,从而带来了甚至不创建全新会话的可能性。另一件事是,您获得的会话将sf.getCurrentSession()
自动刷新并关闭。
sf.openSession()
另一方面,该方法创建一个新会话,但不尝试将其与线程关联。但是请记住sf.openSession()
,它引入了另一个障碍,那就是希望用户自己处理会话的关闭和刷新,而不是让Hibernate为我们自动进行。
sf.getCurrentSession()
通常就足够了。sf.openSession()
提供并促进了会话存储和管理位置的更高级别的管理。当然,这是一个高级选项。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句