2014-02-25 113 views
0

我是hibernate的新手,我在使用getCurrentSession()和openSession()检索会话时有点困惑,许多文章都提到getCurrentSession会创建一个全新的会话,尚未存在,并且如果会话已经可用,则不会创建新会话,另一方面,openSession会创建一个全新的会话。在休眠中使用getCurrentSession()和openSession()检索会话

  1. 在这里,我有一个混淆确实openSession()总是创建一个全新的会话?
  2. 休眠池会话是否在getCurrentSession()中使用相同的会话?

能否请你帮我澄清这一点,并表示歉意我没有犯错

非常感谢

回答

1
  1. 是。 openSession()将会话绑定到当前上下文。默认情况下是Thread,它也可以在HttpRequest级别使用自定义过滤器或​​
  2. 号Hibernate并不具有实际的连接池开箱约束。看看this question。在该特定上下文中首次调用getCurrentSession()时会话将打开。之后找到已存在的会话,Hibernate使用CurrentSessionContext来确定当前上下文,并返回绑定到该特定上下文的会话。多数应用程序服务器将会话与使用底层ThreadLocal对象创建的Thread关联。