Difference b/w Hibernate's Sessionfactory.getCurrentSession() 和 SessionFactory.openSession()

2022-09-02 23:56:34

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

增加了哪些附加值?SessionFactory.openSession()


答案 1

每次首次调用时,都会打开会话。如果不存在,这将创建一个全新的会话,或者如果已经存在会话,则使用现有会话。sf.getCurrentSession()

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

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

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


答案 2

推荐