session和线程绑定
Posted jasonjson
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了session和线程绑定相关的知识,希望对你有一定的参考价值。
将session和线程绑定,一个Session对应一个线程
方法一:
修改工具类
public class HibernateUtils { private static SessionFactory factory; private static ThreadLocal<Session> threadLocal=new ThreadLocal<Session>(); static{ try { Configuration configuration=new Configuration(); configuration.configure("hibernate.cmd.xml"); factory = configuration.buildSessionFactory(); }catch (ExceptionInInitializerError e){ throw new ExceptionInInitializerError("初始化SessionFactory失败,请检查配置文件"); } } public static Session getSession(){ Session s=threadLocal.get(); if (s==null) { threadLocal.set(factory.openSession()); } s=threadLocal.get(); return s; } }public class HibernateUtils { private static SessionFactory factory; private static ThreadLocal<Session> threadLocal=new ThreadLocal<Session>(); static{ try { Configuration configuration=new Configuration(); configuration.configure("hibernate.cmd.xml"); factory = configuration.buildSessionFactory(); }catch (ExceptionInInitializerError e){ throw new ExceptionInInitializerError("初始化SessionFactory失败,请检查配置文件"); } } public static Session getSession(){ Session s=threadLocal.get(); if (s==null) { threadLocal.set(factory.openSession()); } s=threadLocal.get(); return s; } }
方法一:
修改配置文件,工具类添加新方法
<!--绑定线程和session,实现一个session只有一个线程。--> <property name="hibernate.current_session_context_class">thread</property>
/** *从线程上获取session * 配置了线程和session绑定,才能用 * @return */ public static Session getCurrnetSession(){ return factory.getCurrentSession(); }
/** 当Session和线程绑定后,hibernate,会在事务提交后自动关闭session **/
以上是关于session和线程绑定的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Hibernate Session 绑定到 Grails 中的线程?
服务端新开多线程使用HibernateSession 杜绝No session
带有注释的 Spring + Hibernate:没有 Hibernate Session 绑定到线程
没有 Hibernate Session 绑定到线程,并且配置不允许在这里创建非事务性会话
[原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定