[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,求修正
建议使用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]
试试这样修改:
[code="java"]
public static Session getSession(){
if (session==null || !session.isOpen()) {
buildSession();
}
return session;
}
[/code]
提示你看一下session关闭后是什么?
[quote]
试试这样修改:
[code="java"]
public static Session getSession(){
if (session==null || !session.isOpen()) {
buildSession();
}
return session;
}
[/code]
14 分钟前
[/quote]
在补充一点
[code="java"]
public static void closeSession(){
if (session!=null ) {
if(session.isOpen()){
session.close();
}
session=null;
}
}
[/code]
这哪个学校的老师写的工具类............
兄弟 楼上的答案很正确,这里就不做解释了
就只想问一句 你是哪个学校的?简直误人子弟