Hibernate openSession() 与 getCurrentSession() 区别

 

一、getCurrentSession()openSession()的区别
  

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

2、采用getCurrentSession()创建的session会绑定到当前线程中,

而采用openSession()创建的session则不会
3
采用getCurrentSession()创建的sessioncommitrollback后,会自 动关闭,而采用openSession()创建的session必须手动关闭
4
、使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:
1 如果使用的是本地事务(jdbc事务)
<property name="hibernate.current_session_context_class">thread</property>
2)如果使用的是全局事务(jta事务)
<property name="hibernate.current_session_context_class">jta</property>

 

二、openSession() getCurrentSession() 有何不同和关联呢?

 

SessionFactory 启动的时候, Hibernate 会根据配置创建相应的 CurrentSessionContext ,在 getCurrentSession() 被调用的时候,实际被执行的方法是 CurrentSessionContext.currentSession() 。在 currentSession() 执行时,如果当前 Session 为空, currentSession 会调用 SessionFactory openSession 。所以 getCurrentSession() 对于 Java EE 来说是更好的获取 Session 的方法。在一个应用程序中,如果DAO 层使用Spring hibernate 模板,通过Spring 来控制session 的生命周期,则首选getCurrentSession ()

 

你可能感兴趣的:(Hibernate openSession() 与 getCurrentSession() 区别)