现在的位置: 首页 > 综合 > 正文

oenSession()和 getCurrentSession()的区别

2013年11月11日 ⁄ 综合 ⁄ 共 863字 ⁄ 字号 评论关闭

 Configuration cfg = new Configuration();
        SessionFactory sf = cfg.configure().buildSessionFactory();
        Session session = sf.openSession()

这里使用oenSession()和 getCurrentSession()的区别是:

1、采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()创建的session则不会

     采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()创建的session必须手动关闭

    采用getCurrentSession()创建的session: 如果当前的上下文环境里没有session就创建一个新的,如果有就不用在创建了,拿现有的。而oenSession()永远是创建新的 

        session,

    采用getCurrentSession()创建的session:  session提交前,无论拿多少次,都是同一个,提交后,就不是同一个session了,且session无需关闭,会自动close 。用来界

    定事务边界。 oenSession() 需要手动close掉。

   

2、用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:

     如果使用的是本地事务(jdbc事务)

<property name="current_session_context_class">thread</property>

    如果使用的是全局事务(jta事务)

<property name="current_session_context_class">jta</property>

 

3、如果不加的话,会出现 异常“No CurrentSessionContext configured”

 

 

抱歉!评论已关闭.