u010031400 2013-08-08 03:23
浏览 265
已采纳

刚学的Hibernate求解session的关闭问题

[code="java"]package com.pb.hibernate.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
private static Session session;

private HibernateUtil(){}

static{
    buildSession();
}

private static void buildSession(){
    Configuration config=new Configuration().configure();
    SessionFactory sf=config.buildSessionFactory();
    session=sf.openSession();
}

public static Session getSession(){
    if (session==null) {
        buildSession();
    }
    return session;
}

public static void closeSession(){
    if (session!=null) {
        session.close();
    }
}

}[/code] 这是我们老师写的代码,一个Hibernate的工具类,23行好像有问题,session关闭后不为空,就不会执行buildSession()这个方法,然后就一直报session is closed,求修正

  • 写回答

6条回答 默认 最新

  • zm112358 2013-08-08 09:50
    关注

    建议使用ThreadLocal 来编写hibernate的Session初始化 这也是hibernate官方建议的
    [code="java"]
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;

    public class HibernateFactory {
    private static Configuration cfg;
    private static SessionFactory sf;
    private static ThreadLocal th = new ThreadLocal();

    static {
        cfg = new Configuration();
        cfg.configure();
        sf = cfg.buildSessionFactory();
    }
    
    public static Session getSession() {
        Session session = th.get();
        if (session == null) {
            session = sf.openSession();
            th.set(session);
        }
        return session;
    }
    
    public static void closeSession() {
        Session session = th.get();
        if (session != null) {
            session.close();
            th.set(null);
        }
    }
    

    }
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog