一尘不染

hibernate openSession()vs getCurrentSession()

hibernate

我对在JSP Web应用程序中使用Hibernate有一些疑问。

  1. 它的价值是hibernate.current_session_context_class什么?

  2. 然后,应使用以下哪个语句?又为什么呢

     Session s = HibernateUtil.getSessionFactory().openSession();
    

    Session s = HibernateUtil.getSessionFactory().getCurrentSession()

  3. 最后,“每个网络应用一个会话”或“每个请求一个会话”哪个更好?


阅读 391

收藏
2020-06-20

共1个答案

一尘不染

如本论坛帖子中所述,1和2是相关的。如果您设置hibernate.current_session_context_class为线程,然后实现打开会话的servlet过滤器之类的东西,则可以使用来访问该会话SessionFactory.getCurrentSession()

SessionFactory.openSession()操作完成后,始终会打开一个新会话,您必须关闭该会话。SessionFactory.getCurrentSession()返回绑定到上下文的会话-
您无需关闭此会话。

如果您使用Spring或EJB管理事务,则可以将它们配置为与事务一起打开/关闭会话。

您永远不要使用one session per web app-会话不是线程安全的对象-
不能被多个线程共享。您应该始终使用“每个请求一个会话”或“每个事务一个会话”

2020-06-20