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 }
相关文章
相关标签/搜索