Hibernate 4.X获取session

package cn.com.songjy.sh.util;

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

public class HibernateSessionFactory {
	private static Configuration configuration = null;
	private static SessionFactory sessionFactory = null;
	/*ServiceRegistry是Hibernate4.X新增接口,
	应用于Hibernate的配置或者服务等将统一向这个ServiceRegistry注册后才能生效。
	所以需要构建一个ServiceRegistry对象,将配置信息向它注册,然后Configuration对象根据从这个ServiceRegistry对象中获取配置信息生成SessionFactory。
	Hibernate4的配置入口不再是Configuration对象,而是ServiceRegistry对象,Configuration对象将通过ServiceRegistry对象获取配置信息。
	hibernate4 源码位置:org.hibernate.service.ServiceRegistryBuilder	具体可参看hibernate源码。以及API*/
	private static ServiceRegistry serviceRegistry = null;
	
	
	static {
		try {
			// 首先获取配置信息
			configuration =  new Configuration().configure();
			serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
			
			// 创建Session Factory			
			sessionFactory = configuration.buildSessionFactory(serviceRegistry);
		} catch (HibernateException e) {
			// System.out.println("SessionFactory创建失败");
			e.printStackTrace();
		}
	}
	
	public static Session getSession() {
		Session session = null;
		if(null==session || false==session.isOpen()){
			session = sessionFactory.openSession();
		}
		
		return session;
	}
	
	public static void closeSession(Session session){
		try {
			if(null!=session && session.isOpen())
				session.close();
		} catch (HibernateException e) {
			e.printStackTrace();
		}
	}
}


package cn.com.songjy.sh.util;

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

public class HibernateSessionManager {
	
	private static Configuration configuration = null;
	private static SessionFactory sessionFactory = null;
	
	private static ServiceRegistry serviceRegistry = null;
	
	static {
		try {
			// 首先获取配置信息
			configuration =  new Configuration().configure();
			serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
			
			// 创建Session Factory			
			sessionFactory = configuration.buildSessionFactory(serviceRegistry);
		} catch (HibernateException e) {
			// System.out.println("SessionFactory创建失败");
			e.printStackTrace();
		}
	}
	

	private static final ThreadLocal<Session> ThreadLocal_Session = new ThreadLocal<Session>();
	private static final ThreadLocal<Transaction> ThreadLocal_Transaction = new ThreadLocal<Transaction>();
	
	/**
	 * 获取当前线程中的Session
	 */
	public static Session getThreadLocalSession(){
		
		Session session =  ThreadLocal_Session.get();
		
		if(null == session || (false==session.isOpen())){
			session = sessionFactory.openSession();
			ThreadLocal_Session.set(session);
		}
		
		return session;
	}
	
	/**
	 * 启动或者加入当前线程中Session的Transaction
	 */
	public static Transaction getThreadLocalTransaction(){
		Transaction transaction = ThreadLocal_Transaction.get();
		if(null == transaction){
			transaction = getThreadLocalSession().beginTransaction();
			ThreadLocal_Transaction.set(transaction);
		}
			
		return transaction;
	}
	
	/**
	 * 提交当前线程中Session的Transaction
	 */
	public static void commitThreadLocalTransaction(){
		try {
			Transaction transaction = ThreadLocal_Transaction.get();
			if(null != transaction)
				transaction.commit();
//			ThreadLocal_Transaction.set(null);
			ThreadLocal_Transaction.remove();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 回滚当前线程中Session的Transaction事物
	 */
	public static void rollbackThreadLocalTransaction(){
		try {
			Transaction transaction = ThreadLocal_Transaction.get();
			if(null != transaction && transaction.isActive())
				transaction.rollback();
//			ThreadLocal_Transaction.set(null);
			ThreadLocal_Transaction.remove();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 关闭当前线程中的Session
	 */
	public static void closeThreadLocalSession(){
		Session session =  ThreadLocal_Session.get();
		
		try {
			if(null != session)
				if(true == session.isOpen())
					session.close();
		} catch (HibernateException e) {
			e.printStackTrace();
		}
//		ThreadLocal_Session.set(null);
		ThreadLocal_Session.remove();
	}
}

猜你喜欢

转载自songjianyong.iteye.com/blog/1714567