package com.btr.hb;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.Transaction;
/**
* @author linliangyi@team of miracle
*
* Hibernate 工具类
*
*/
public class HibernateUtil {
private static Log log = LogFactory.getLog(HibernateUtil.class);
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
ex.printStackTrace();
log.error("Initial SessionFactory creation failed.", ex);
throw new ExceptionInInitializerError(ex);
} // end of the try - catch block
} // end of static block
public static final ThreadLocal localSession = new ThreadLocal();
public static final ThreadLocal localTransaction = new ThreadLocal();
public static Session openSession() throws HibernateException {
Session session = (Session)localSession.get();
if(session == null){
session = sessionFactory.openSession();
localSession.set(session);
}
if(!session.isOpen()){
localSession.set(null);
session = sessionFactory.openSession();
localSession.set(session);
}
return session;
}
public static void closeSession() throws HibernateException {
Session session = (Session)localSession.get();
localSession.set(null);
if(session != null){
session.close();
session = null;
}
}
public static Transaction beginTransaction() throws HibernateException {
Transaction tx = (Transaction)localTransaction.get();
if(tx == null){
tx = openSession().beginTransaction();
localTransaction.set(tx);
}
if(tx.wasCommitted()) {
tx = null;
tx = openSession().beginTransaction();
localTransaction.set(tx);
}
return tx;
}
public static void commitTransaction() throws HibernateException {
Transaction tx = (Transaction)localTransaction.get();
localTransaction.set(null);
if(tx != null){
tx.commit();
tx = null;
}
}
public static void rollbackTransaction() throws HibernateException {
Transaction tx = (Transaction)localTransaction.get();
localTransaction.set(null);
if(tx != null){
tx.rollback();
tx = null;
}
}
public static void main(String[] args){
}
}