`
df274119386
  • 浏览: 55647 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate Util类

阅读更多

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import org.hibernate.Interceptor;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

/**
 * 
 * @author fei
 * 
 */
public class HibernateUtil2 {
	private static Log log = LogFactory.getLog(HibernateUtil2.class);

	private static Configuration configuration;
	private static SessionFactory sessionFactory;
	private static final ThreadLocal threadSession = new ThreadLocal();
	private static final ThreadLocal threadTransaction = new ThreadLocal();
	private static final ThreadLocal threadInterceptor = new ThreadLocal();

	// Create the initial SessionFactory from the default configuration files
	static {
		try {
			configuration = new Configuration();
			sessionFactory = configuration.configure().buildSessionFactory();
			// We could also let Hibernate bind it to JNDI:
			// configuration.configure().buildSessionFactory()
		} catch (Throwable ex) {
			// We have to catch Throwable, otherwise we will miss
			// NoClassDefFoundError and other subclasses of Error
			log.error("Building SessionFactory failed.", ex);
			throw new ExceptionInInitializerError(ex);
		}
	}

	/**
	 * Returns the SessionFactory used for this static class.
	 * 
	 * @return SessionFactory
	 */
	public static SessionFactory getSessionFactory() {
		// Instead of a static variable, use JNDI:
		// SessionFactory sessions = null;
		// try {
		// Context ctx = new InitialContext();
		// String jndiName = "java:hibernate/HibernateFactory";
		// sessions = (SessionFactory)ctx.lookup(jndiName);
		// } catch (NamingException ex) {
		// throw new InfrastructureException(ex);
		// }
		// return sessions;

		return sessionFactory;
	}

	/**
	 * Returns the original Hibernate configuration.
	 * 
	 * @return Configuration
	 */
	public static Configuration getConfiguration() {
		return configuration;
	}

	/**
	 * Rebuild the SessionFactory with the static Configuration.
	 * 
	 */
	public static void rebuildSessionFactory()
			throws ExceptionInInitializerError {
		synchronized (sessionFactory) {
			try {
				sessionFactory = getConfiguration().buildSessionFactory();
			} catch (Exception ex) {
				throw new ExceptionInInitializerError(ex);
			}
		}
	}

	/**
	 * Rebuild the SessionFactory with the given Hibernate Configuration.
	 * 
	 * @param cfg
	 */
	public static void rebuildSessionFactory(Configuration cfg)
			throws ExceptionInInitializerError {
		synchronized (sessionFactory) {
			try {
				sessionFactory = cfg.buildSessionFactory();
				configuration = cfg;
			} catch (Exception ex) {
				throw new ExceptionInInitializerError(ex);
			}
		}
	}

	/**
	 * Retrieves the current Session local to the thread.
	 * <p/>
	 * If no Session is open, opens a new Session for the running thread.
	 * 
	 * @return Session
	 */
	public static Session getSession() throws ExceptionInInitializerError {
		Session s = (Session) threadSession.get();
		try {
			if (s == null) {
				log.debug("Opening new Session for this thread.");
				if (getInterceptor() != null) {
					log.debug("Using interceptor: "
							+ getInterceptor().getClass());
					s = getSessionFactory().openSession(getInterceptor());
				} else {
					s = getSessionFactory().openSession();
				}
				threadSession.set(s);
			}
		} catch (HibernateException ex) {
			throw new ExceptionInInitializerError(ex);
		}
		return s;
	}

	/**
	 * Closes the Session local to the thread.
	 */
	public static void closeSession() throws ExceptionInInitializerError {
		try {
			Session s = (Session) threadSession.get();
			threadSession.set(null);
			if (s != null && s.isOpen()) {
				log.debug("Closing Session of this thread.");
				s.close();
			}
		} catch (HibernateException ex) {
			throw new ExceptionInInitializerError(ex);
		}
	}

	/**
	 * Start a new database transaction.
	 */
	public static void beginTransaction() throws ExceptionInInitializerError {
		Transaction tx = (Transaction) threadTransaction.get();
		try {
			if (tx == null) {
				log.debug("Starting new database transaction in this thread.");
				tx = getSession().beginTransaction();
				threadTransaction.set(tx);
			}
		} catch (HibernateException ex) {
			throw new ExceptionInInitializerError(ex);
		}
	}

	/**
	 * Commit the database transaction.
	 */
	public static void commitTransaction() throws ExceptionInInitializerError {
		Transaction tx = (Transaction) threadTransaction.get();
		try {
			if (tx != null && !tx.wasCommitted() && !tx.wasRolledBack()) {
				log.debug("Committing database transaction of this thread.");
				tx.commit();
			}
			threadTransaction.set(null);
		} catch (HibernateException ex) {
			rollbackTransaction();
			throw new ExceptionInInitializerError(ex);
		}
	}

	/**
	 * Commit the database transaction.
	 */
	public static void rollbackTransaction() throws ExceptionInInitializerError {
		Transaction tx = (Transaction) threadTransaction.get();
		try {
			threadTransaction.set(null);
			if (tx != null && !tx.wasCommitted() && !tx.wasRolledBack()) {
				log.debug("Tyring to rollback database transaction of this thread.");
				tx.rollback();
			}
		} catch (HibernateException ex) {
			throw new ExceptionInInitializerError(ex);
		} finally {
			closeSession();
		}
	}

	/**
	 * Reconnects a Hibernate Session to the current Thread.
	 * 
	 * @param session
	 *            The Hibernate Session to be reconnected.
	 */
	public static void reconnect(Session session)
			throws ExceptionInInitializerError {
		try {
			session.reconnect();
			threadSession.set(session);
		} catch (HibernateException ex) {
			throw new ExceptionInInitializerError(ex);
		}
	}

	/**
	 * Disconnect and return Session from current Thread.
	 * 
	 * @return Session the disconnected Session
	 */
	public static Session disconnectSession()
			throws ExceptionInInitializerError {

		Session session = getSession();
		try {
			threadSession.set(null);
			if (session.isConnected() && session.isOpen())
				session.disconnect();
		} catch (HibernateException ex) {
			throw new ExceptionInInitializerError(ex);
		}
		return session;
	}

	/**
	 * Register a Hibernate interceptor with the current thread.
	 * <p>
	 * Every Session opened is opened with this interceptor after registration.
	 * Has no effect if the current Session of the thread is already open,
	 * effective on next close()/getSession().
	 */
	public static void registerInterceptor(Interceptor interceptor) {
		threadInterceptor.set(interceptor);
	}

	private static Interceptor getInterceptor() {
		Interceptor interceptor = (Interceptor) threadInterceptor.get();
		return interceptor;
	}

}


分享到:
评论

相关推荐

    hibernate

    ##### 2.4 Hibernate Util类 - **SessionFactory和Session**: HibernateUtil类通常用于管理SessionFactory和Session的创建。在Hibernate3中,推荐使用ThreadLocal模式来管理Session,这可以确保每个线程都有自己的...

    HibernateUtil.java Hibernate5.2.1

    Hibernate5.2.1 的工具类 创建session 和 sessionFactory

    java util工具类

    java util帮助类,包括日期工具类、字符串处理工具类、上传工具类、http请求工具类、hibernate工具类、MD5工具类、分页工具类等。 CodeStringUtil.java CreateFileUtil.java DateUtil.java FileCopy.java ...

    AnyFo - Util - AnyFoDao :Spring + Hibernate整合通用的DAO层类

    本类封装了Spring提供的HibernateTemplate,从提供了对数据的各种操作,因此,本类尤其适合用Spring + Hibernate整合后进行系统开 发时使用。 AnyFoAction功能概述 AnyFoDao中的那个类,提供多个方法来对...

    java根据实体类生成Hibernate映射文件

    映射文件是Hibernate中的关键元素,它定义了Java实体类与数据库表之间的对应关系。本主题将深入探讨如何根据Java实体类自动生成Hibernate的映射文件,这对于不使用MyEclipse等集成开发环境的开发者来说尤其实用。 ...

    hibernate实体映射文件字段设置默认值

    &lt;property name="date" type="java.util.Date" insert="true" update="true"&gt; ()" /&gt; ``` 在这个例子中,`&lt;property&gt;`标签指定了Java类中的属性名称`date`,并将其映射到数据库表中的`PUB_DATE`列。`default`属性...

    Hibernate Jar包(全)

    在使用这些jar包之前,开发者需要配置Hibernate的主配置文件(hibernate.cfg.xml),定义数据库连接信息、实体类、实体类与数据库表的映射等。同时,还需要在实体类上使用注解或者XML配置文件来声明它们的数据库映射...

    hibernate4.3.11所需jar包

    - **Jakarta Commons Logging**: 提供日志记录服务,允许Hibernate使用各种日志框架(如log4j, java.util.logging)。 - **JTA (Java Transaction API)**: 支持分布式事务处理,如JBOSS Transactions或Atomikos等...

    封装了一个Hibernate增删改查的工具类

    本篇将详细介绍一个基于Hibernate封装的增删改查工具类,该工具类整合了util、comm.util以及beanutils等库,旨在提高开发效率,降低代码复杂度,方便开发者快速地获取session和sessionFactory。 首先,让我们理解...

    hibernate 反射原理

    1. **类和表映射**:Hibernate通过注解或XML配置文件定义实体类与数据库表之间的映射关系,反射机制使得Hibernate能够动态地读取这些元数据,并根据实体类的结构生成相应的SQL语句。 2. **对象状态管理**:...

    myEclipse使用hibernate图解

    - 导入必要的 Hibernate 相关类,如 `Session` 和 `getSession()` 方法。 - 编写测试代码来验证 Hibernate 是否能正确地与数据库交互。 ```java package dao; import java.util.List; import org.hibernate....

    hibernate注册功能的实现

    3. Hibernate配置:在Hibernate配置文件中,定义实体类与数据库表之间的映射,包括列名、类型等。使用注解或者XML配置文件来完成这一过程。 4. 实体管理:引入Hibernate SessionFactory,它是与数据库交互的核心。...

    hibernate开发流程 入门

    【hibernate开发流程 入门】 在Java开发中,Hibernate是一个非常流行的持久化框架...同时,理解Hibernate的配置文件(hibernate.cfg.xml)以及实体类和映射文件的细节也至关重要,这将帮助你更好地控制数据访问行为。

    hibernate4

    - 推荐采用分层架构,例如:Action 类(com.hwadee.action)、Service 类(com.hwadee.service)、Entity 类(com.hwadee.entity)和工具类(com.hwadee.util)。Hibernate 的 Session 工厂通常放在工具类包中。 -...

    hibernate-3.13.zip

    1. **hibernate3.jar**:这是 Hibernate 框架的核心库文件,包含了所有必需的类和接口,用于实现 ORM 功能。开发者可以直接将这个 JAR 文件引入项目中,以便利用 Hibernate 的功能进行数据库操作。 2. **lib** 目录...

    hibernate所有用到的jar包

    4. **javassist.jar**:这是一个代码生成和转换库,Hibernate使用它来动态创建和修改类的字节码。在运行时,如果需要,它能够动态生成代理类以适应ORM的需求。 5. **jboss-logging.jar**:提供日志服务,Hibernate...

    Hibernate3.3中的lib

    6. **Ant任务**: Hibernate提供了一些Ant任务,使得在构建流程中整合Hibernate变得更加简单,例如生成Java持久化类或者配置文件。 7. **DOM4J**: 一个强大的XML处理库,Hibernate使用它来解析和生成XML配置文件,...

    Hibernate包作用详解

    `cglib-asm.jar`提供了CGLIB库,CGLIB是一个强大的、高性能的代码生成库,Hibernate使用它来动态生成持久化对象的代理类,以实现透明的ORM功能。这个库是必需的,因为它使Hibernate能够实现对象的懒加载和代理行为。...

    Hibernate框架ORM的实现原理

    - Java中提供了`java.util.Properties`类用于解析此类文件。 - 可以通过调用`Properties`类的方法如`load()`加载文件,再通过`getProperty()`等方法获取配置信息。 3. **Java类文件解析**: - 解析Java类文件...

    springboot集成hibernate

    import java.util.List; @Repository public class UserDaoImpl implements UserDao { @Resource private SessionFactory sessionFactory; @Override public User getUserById(Long id) { Session session =...

Global site tag (gtag.js) - Google Analytics