Hibernate中openSession()和getCurrentSession()方法的区别

openSession

openSession是打开一个新的session对象,而且每次使用都是打开一个新的session,假如连续使用多次,则获得的session不是同一个对象,并且使用完需要调用close方法关闭session。

getCurrentSession

getCurrentSession是获取当前上下文一个session对象,当第一次使用此方法时,会自动产生一个session对象,并且连续使用多次时,得到的session都是同一个对象,getCurrentSession 就是如果有已经使用的,用旧的,如果没有,建新的。

getCurrentSession与openSession区别

  • 1.事务提交会自动close,不需要像openSession一样自己调用close方法关闭session
  • 2.上下文配置中,需要配置:thread/jta

a).thread 使用connection单数据库连接管理事务
b).jta 分布式事务管理 (多数据库访问),jta 由中间件提供(JBoss WebLogic 等, 但是tomcat 不支持)

  • 3.采用getCurrentSession()创建的Session会绑定到当前的线程中去、而采用OpenSession()则不会。
    1. 在一个应用程序中,如果DAO 层使用Spring 的hibernate 模板,通过Spring 来控制session 的生命周期,则首选getCurrentSession ()。

总结:

  • getCurrentSession () 使用当前的session
  • openSession() 重新建立一个新的session

你可能感兴趣的:(Hibernate中openSession()和getCurrentSession()方法的区别)