hibernate中,sessionFactory是线程安全的,可以被所有的应用程序共享,而session不是线程安全的,被多个线程共享时会出现不可预知的后果,那么对session 采用ThreadLocal实现共享会出问题吗?
[code]
public class HibernateUtil {
private static SessionFactory sessionFactory;
static{
try{
sessionFactory = new Configuration().configure().buildSessionFactory();
}catch(HibernateException e){
throw new RunTimeException("Configuration problem:"+e.getMessage());
}
}
public static final TreadLocal session = new ThreadLocal();
public static Session currentSession() thrwos HibernateException{
Session s = (Session) session.get();
if(s==null){
s = sessionFactory().openSession();
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException{
Session s = (Session)session.get();
session.set(null);
if(null != s){
s.close();
}
}
}
[/code]
这个是《深入浅出hibernate》中关于session管理的实现, 有些不明白。如果各位有比较好的对session管理的方法,大家都来说说。
[code]
public class HibernateUtil {
private static SessionFactory sessionFactory;
static{
try{
sessionFactory = new Configuration().configure().buildSessionFactory();
}catch(HibernateException e){
throw new RunTimeException("Configuration problem:"+e.getMessage());
}
}
public static final TreadLocal session = new ThreadLocal();
public static Session currentSession() thrwos HibernateException{
Session s = (Session) session.get();
if(s==null){
s = sessionFactory().openSession();
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException{
Session s = (Session)session.get();
session.set(null);
if(null != s){
s.close();
}
}
}
[/code]
这个是《深入浅出hibernate》中关于session管理的实现, 有些不明白。如果各位有比较好的对session管理的方法,大家都来说说。