cn.easyproject.easycommons.commondao.factory.HibernateSessionFactory Maven / Gradle / Ivy
package cn.easyproject.easycommons.commondao.factory;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
/**
* EasyCommonDAO HibernateSessionFactory
* Configures and provides access to Hibernate sessions, tied to the
* current thread of execution. Follows the Thread Local Session
* pattern.
*
* @author Ray
* @author [email protected]
* @author easyproject.cn
* @since 1.0.0
*/
public class HibernateSessionFactory {
/**
* Location of hibernate.cfg.xml file.
* Location should be on the classpath as Hibernate uses
* #resourceAsStream style lookup for its configuration file.
* The default classpath location of the hibernate config file is
* in the default package. Use #setConfigFile() to update
* the location of the configuration file for the current session.
*/
private static final ThreadLocal threadLocal = new ThreadLocal();
private static SessionFactory sessionFactory;
private static final String CONFIGURATION_FILE="hibernate.cfg.xml";
static {
try {
//Hibernate 5.X
// 注册配置文件
StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder()
.configure(CONFIGURATION_FILE) // configures settings from hibernate.cfg.xml
.build();
try {
sessionFactory = new MetadataSources( standardRegistry ).buildMetadata().buildSessionFactory();
}catch (Exception e) {
e.printStackTrace();
// 手动销毁registry
StandardServiceRegistryBuilder.destroy( standardRegistry );
}
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
private HibernateSessionFactory() {
}
/**
* Returns the ThreadLocal Session instance. Lazy initialize
* the SessionFactory if needed.
*
* @return Session
* @throws HibernateException
*/
public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
}
return session;
}
/**
* Rebuild hibernate session factory
*
*/
public static void rebuildSessionFactory() {
try {
// 注册配置文件
StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder()
.configure("hibernate.cfg.xml") // configures settings from hibernate.cfg.xml
.build();
try {
sessionFactory = new MetadataSources( standardRegistry ).buildMetadata().buildSessionFactory();
}catch (Exception e) {
e.printStackTrace();
// 手动销毁registry
StandardServiceRegistryBuilder.destroy( standardRegistry );
}
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
/**
* Close the single hibernate session instance.
*
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close();
}
}
/**
* @return session factory
*
*/
public static org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
}
} © 2015 - 2025 Weber Informatics LLC | Privacy Policy