hibernate4.2.0的HibernateSessionFactory()函數

因爲hibernate4放棄了buildSessionFactory()方法,所以getSession()需要重新修改一下,具體代碼如下


package com.ssh.pwq.hibernate;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

@SuppressWarnings("deprecation")
public class HibernateSessionFactory {
	private static String CONFIG_FILE_LOCATION 
					= "/hibernate.cfg.xml";							//指定配置文件路徑
	private static final ThreadLocal<Session> threadLocal 
					= new ThreadLocal<Session>();					//定義ThreadLocal對象
	private  static Configuration configuration 
					= new Configuration();							//定義Configuration對象
	private static org.hibernate.SessionFactory sessionFactory;		//定義SessionFactory對象
	private static String configFile = CONFIG_FILE_LOCATION;
	static {
		try {
			configuration.configure(configFile);//讀取配置文件
			ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().
					applySettings(configuration.getProperties()).buildServiceRegistry();
			sessionFactory = 
				configuration.buildSessionFactory(serviceRegistry);//根據配置文件創建SessionFactory對象
		} catch (Exception e) {
			System.err
					.println("%%%% Error Creating SessionFactory %%%%");
			e.printStackTrace();
		}
	}
	private HibernateSessionFactory() {
	}
	public static Session getSession() throws HibernateException {
		Session session = (Session) threadLocal.get();//從ThreadLocal對象中獲得Session對象
		if (session == null || !session.isOpen()) {
			if (sessionFactory == null) {
				rebuildSessionFactory();
			}
			//如果SessionFactory對象不爲空,則調用其openSession方法創建Session對象
			session = (sessionFactory != null) ? sessionFactory.openSession(): null;
			threadLocal.set(session);//在ThreadLocal對象中保存該Session對象
		}
		return session;
	}
	public static void rebuildSessionFactory() {
		try {
			configuration.configure(configFile);//讀取配置文件
			ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().
					applySettings(configuration.getProperties()).buildServiceRegistry();
			sessionFactory = 
				configuration.buildSessionFactory(serviceRegistry);
		} catch (Exception e) {
			System.err
					.println("%%%% Error Recreating SessionFactory %%%%");
			e.printStackTrace();
		}
	}
	public static void closeSession() throws HibernateException {
		Session session = (Session) threadLocal.get();//從ThreadLocal對象中獲得Session對象
		threadLocal.set(null);//將當前線程Session對象從ThreadLocal對象中移除
		if (session != null) {
			session.close();
		}
	}
	public static org.hibernate.SessionFactory getSessionFactory() {//取得SessionFactory對象
		return sessionFactory;
	}
	public static void setConfigFile(String configFile) {//設置新的配置文件
		HibernateSessionFactory.configFile = configFile;
		sessionFactory = null;
	}
	public static Configuration getConfiguration() {//獲得Configuration對象
		return configuration;
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章