http://blog.youkuaiyun.com/sunyujia/article/details/2549564
ThreadLoal的变量设session
是获取/创建时最迟将Threadlocal设为session的对象保护起来
提交/回滚时最早将Threadlocal的对象set成null
package Load;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class loadsession {
static Session session=null;
private static ThreadLocal sessionThread=new ThreadLocal();//存hibernate的session
private static ThreadLocal transactionThread=new ThreadLocal();//存事务
static SessionFactory sf=null;
public static Session getsession()
{
Configuration conf=new Configuration().configure();
sf=conf.buildSessionFactory();
session=(Session) sessionThread.get();
if(session==null){
session=sf.openSession();}
else{
session=sf.getCurrentSession();
}
sessionThread.set(session);
return session;
}
public static void closesession()
{
session=(Session) sessionThread.get();
if(session!=null){
session.flush();
session.close();
sf.close();
sessionThread.set(null);
}
}
//获取当前session的事务
public static Transaction transaction()
{
Transaction trans=(Transaction) transactionThread.get();
if(trans==null)
{
trans=session.beginTransaction();
transactionThread.set(trans);
}
return trans;
}
//提交事务
public void comitTransaction()
{
Transaction trans=(Transaction) transactionThread.get();
transactionThread.set(null);
if(trans!=null)
{
trans.commit();
}
}
//回滚当前事务
public void rollbackTransaction()
{
Transaction tx=(Transaction) transactionThread.get();
transactionThread.set(null);
if(tx!=null)
{
tx.rollback();
}
}
}
测试 类
- public static void main(String[] args) throws Exception {
- HibernateUtil.initSessionFactory(new File(Test.class.getClassLoader()
- .getResource("hibernate.cfg.xml").getFile()));
- Session session = HibernateUtil.getSession();
- HibernateUtil.transaction();
- User u = new User();
- u.setName("test");
- session.save(u);
- HibernateUtil.commitTransaction();
- HibernateUtil.closeSession();
- }