gpt4 book ai didi

java - 黑白 Hibernate 的 Sessionfactory.getCurrentSession() 和 SessionFactory.openSession() 的区别

转载 作者:太空狗 更新时间:2023-10-29 22:32:08 24 4
gpt4 key购买 nike

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

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

最佳答案

每当第一次调用 sf.getCurrentSession() 时,就会打开一个 session 。如果 session 不存在,这将创建一个全新的 session ;如果 session 已经存在,则使用现有的 session 。

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

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

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

关于java - 黑白 Hibernate 的 Sessionfactory.getCurrentSession() 和 SessionFactory.openSession() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10072367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com