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条)

报告相同问题?

悬赏问题

  • ¥20 360摄像头无法解绑使用,请教解绑当前账号绑定问题,
  • ¥15 docker实践项目
  • ¥15 数电几道习题,写出作答过程,ai一律不采用
  • ¥15 利用pthon计算薄膜结构的光导纳
  • ¥15 海康hlss视频流怎么播放
  • ¥15 Paddleocr:out of memory error on GPU
  • ¥30 51单片机C语言数码管驱动单片机为AT89C52
  • ¥100 只改动本课件的 cal_portfolio_weight_series(decision_date), 跑完本课件。设计一个信息比率尽量高的策略。
  • ¥20 如何在visual studio 2022中添加ImageMagick库
  • ¥50 如何实现uniapp编译的微信小程序做可回溯视频