因爲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;
}
}