3.7 同一个线程拿到的 session 是同一个

 [[178964]]

getCurrentSession 获取当前线程的 session

如果没有就新建

如果有就使用已有的

跟 openSession 获取的 session 不一样之处:

1. 不管增删改查,都要加事务控制

2. 配置文件中要加入 current_session_context_class=thread

3. 它会在事务结束时(commit 或 rollback)自动关掉 session

 
 
  1. @Test 
  2. public void test14() { 
  3.  SessionFactory sf = new Configuration().configure().buildSessionFactory(); 
  4.  /** 
  5.  * getCurrentSession获取当前线程的session 
  6.  * 如果没有就新建 
  7.  * 如果有就使用已有的 
  8.  * 跟openSession获取的session不一样之处: 
  9.  * 1. 不管增删改查,都要加事务控制 
  10.  * 2. 配置文件中要加入current_session_context_class取值thread, jta 
  11.  * 3. 它会在事务结束时(commitrollback)自动关掉session 
  12.  */ 
  13.  Session session = sf.getCurrentSession(); 
  14.  session.beginTransaction(); 
  15.  Order o = (Order) session.get(Order.class, 1); 
  16.  System.out.println(o); 
  17.  session.getTransaction().commit(); 

 【本文是专栏作者张勇波的原创文章,转载请通过获取作者授权】

THE END