附Hibernate的session与本地线程绑定的方法:
1.在核心映射文件hibernate.cfg.xml里添加:
<!-- 在hibernate.cfg.xml中配置,也就是Hibernate核心配置文件中。配置部位是在第二部分。 -->
<property name="hibernate.current_session_context_class">thread</property>
thread:Session对象的生命周期与本地线程绑定
jta:Session对象的生命周期与JTA事务绑定
managed:Hibernate委托程序来管理Session对象的生命周期
这里用thread。
2.在HibernateUtils.java添加用本地线程返回session的方法:
public static Session getCurrentSession(){//在工具类里面获取与本地线程绑定的session。
return sf.getCurrentSession();//static SessionFactory sf = null;
}
3.测试
Transaction tx=null;
Session session=null;
/**
* 添加
*/
@Test
public void add(){
//1.
/*Configuration cfg = new Configuration();
cfg.configure();*/
//2.
//SessionFactory sessionFactory = cfg.buildSessionFactory();
//SessionFactory sessionFactory = HIbernateUtils.getSessionFactory();
//3.
//Session session = sessionFactory.openSession();
//本地线程获取session
try {
session = HIbernateUtils.getCurrentSession();
//4.
tx = session.beginTransaction();
//5.
User user = new User();
user.setAddress("gz");
user.setPassword("887799");
user.setUsername("iter");
//6.
session.save(user);
//7.
tx.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//本地线程获取session不需要关闭session
//session是绑定了本地线程的session,当本地线程被关闭后,session也就自然而然的被关闭了。
//8.
//session.close();
//sessionFactory.close();
注意事项见上面注释。