HibernateSessionFactory創建-使用ThreadLocal

當即加載仍是延遲加載必需要鏈接數據庫的,而在Java中鏈接數據庫是依賴java.sql.Connection,在hibernate中session就是Connection的一層高級封裝,一個session對應了一個Connection,要實現延遲加載必須有session才行.並且要進行延遲加載還必須保證是同一個session才行,用另一個session去延遲加載前一個session的代理對象是不行的.你們都知道Connection是使用事後必需要進行關閉的,那麼咱們如何保證一次http請求過程當中,一直都使用一個session呢,即一個Connection呢.並且還要保證http請求結束後正確的關閉.java

好,如今咱們知道了咱們要解決的問題sql

1.如何保證http請求結束後正確的關閉session數據庫

2.如何保證http請求過程當中一直使用同一個sessionsession

 1 package util;
 2 
 3 import java.io.Serializable;
 4 
 5 import org.hibernate.Session;
 6 import org.hibernate.SessionFactory;
 7 import org.hibernate.cfg.Configuration;
 8 
 9 public class HibernateSessionFactory implements Serializable{
10     private static final String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
11     private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
12     private  static Configuration configuration = new Configuration();    
13     private static SessionFactory sessionFactory=null;
14     private static String configFile = CONFIG_FILE_LOCATION;
15     //static代碼塊只會在實例化類的時候只執行一次
16     static{
17         try {
18             configuration.configure(configFile);
19             sessionFactory = configuration.buildSessionFactory();
20         } catch (Exception e) {
21             System.err.println("%%%% Error Creating SessionFactory %%%%");
22             e.printStackTrace();
23         }
24         
25     }
26     //獲取Session
27     public static Session getCurrentSession(){
28         Session session =  threadLocal.get();
29         //判斷Session是否爲空,若是爲空,將建立一個session,並付給線程變量tLocalsess
30         try {
31             if(session ==null&&!session.isOpen()){
32                 if(sessionFactory==null){
33                     rbuildSessionFactory();
34                 }else{
35                     session = sessionFactory.openSession();
36                 }
37                 //session = (sessionFactory != null) ? sessionFactory.openSession(): null;
38             }
39             threadLocal.set(session);
40         } catch (Exception e) {
41             // TODO: handle exception
42         }
43         
44         return session;
45     }
46     
47     public static void rbuildSessionFactory(){
48         try {
49             configuration.configure(configFile);
50             sessionFactory = configuration.buildSessionFactory();
51         } catch (Exception e) {
52             System.err.println("%%%% Error Creating SessionFactory %%%%");
53             e.printStackTrace();
54         }
55     }
56 }
相關文章
相關標籤/搜索