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与本地线程绑定

如何将 Hibernate Session 绑定到 Grails 中的线程?

服务端新开多线程使用HibernateSession 杜绝No session

带有注释的 Spring + Hibernate:没有 Hibernate Session 绑定到线程

没有 Hibernate Session 绑定到线程,并且配置不允许在这里创建非事务性会话

[原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定