hibernate中SessionFactory.opensession()与getcurrentsession()的区别

1.getCurrentSession创建的session会和绑定到当前线程,而openSession不会。

2.getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭

3.注意:1,使用SessionFactory.getCurrentSession()需要在hibernate.cfg.xml中如下配置:

如果采用jdbc独立引用程序配置如下:

<propertyname="hibernate.current_session_context_class">thread</property>

如果采用了JTA事务配置如下

<propertyname="hibernate.current_session_context_class">jta</property>

4.openSession()与getCurrentSession()不同与关联:

在SessionFactory启动的时候,Hibernate会根据配置创建相应的CurrentSessionContext,在getCurrentSession()被调用的时候,实际被执行的方法是CurrentSessionContext.currentSession()。在currentSession()执行时,如果当前Session为空,currentSession会调用SessionFactory的openSession。所以getCurrentSession()对于JavaEE来说是更好的获取Session的方法。

5.另外在应用程序中,如果DAO层使用Spring的hibernate模板,通过Spring来控制session的生命周期,则应该getCurrentSession()。

相关推荐