Hibernate学习笔记之Session管理

来源:互联网 发布:python 克隆对象 函数 编辑:程序博客网 时间:2024/04/30 07:02

Session之于Hibernate,有如Connection之于JDBC,如果有效的管理Session,从而避免不必要的性能开支。

由于Session是非线程安全的,因此在对Session进行重用的时候应该杜绝多线程共享一个Session。因此对Session的管理应该遵循“在线程内共享”的原则。

通过ThreadLocal实现Session管理是比较常用的一种方式,ThreadLocal可以确保获得与当前线程绑定的Session实例,具体代码如下所示:

private static Configuration conf=new Configuration().configure();private static SessionFactory sessionFactory=conf.buildSessionFactory();public static final ThreadLocal<Session> threadLocal=new ThreadLocal<Session>();public static SessionFactory getSessionFactory(){return sessionFactory;}public static Session getCurrentSession(){Session session=threadLocal.get();if(session==null){session=sessionFactory.openSession();threadLocal.set(session);}return session;}public static void closeSession(){Session session=threadLocal.get();threadLocal.set(null);if(session!=null){session.close();}}


0 0