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”