Hibernate之openSession與getCurrentSession的區別

youcongtech發表於2018-10-22

openSession 與 getCurrentSession的區別
(1)openSession 每一次獲得的是一個全新的session物件,而getCurrentSession獲得的是與當前執行緒繫結的session物件;
(2)openSession不需要配置,而getCurrentSession需要配置

thread

(3)openSession需要手動關閉,而getCurrentSession系統自動關閉

openSession出來的session要通過:session.close(),

而getSessionCurrent出來的session系統自動關閉,如果自己關閉會報錯

(4)Session是執行緒不同步的,要保證執行緒安全就要使用getCurrentSession

下面這段程式碼執行後可比較它們的(1)

package cn.blog.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Test {

//openSession與getCurrentSession對比

     public static void main(String[] args) {  
          
            Configuration configuration = new Configuration().configure();  
            SessionFactory sf = configuration.buildSessionFactory();  
              
            Session sessionOpen1 = sf.openSession();  
            Session sessionOpen2 = sf.openSession();  
              
            Session sessionThread1 = sf.getCurrentSession();  
            Session sessionThread2 = sf.getCurrentSession();  
              
            System.out.println(sessionOpen1.hashCode() + "<-------->" + sessionOpen2.hashCode());  //每次建立都是新的session物件
            System.out.println(sessionThread1.hashCode() + "<-------->" + sessionThread2.hashCode());  //每次獲得的是當前session

}

}


相關文章