读书人

关于hibernate session管理的一些有关

发布时间: 2012-11-06 14:07:00 作者: rapoo

关于hibernate session管理的一些问题
hibernate中,sessionFactory是线程安全的,可以被所有的应用程序共享,而session不是线程安全的,被多个线程共享时会出现不可预知的后果,那么对session 采用ThreadLocal实现共享会出问题吗?

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();}  }}


这个是《深入浅出hibernate》中关于session管理的实现, 有些不明白。如果各位有比较好的对session管理的方法,大家都来说说。 1 楼 NicholasBugs 2007-12-12 明白了一些,Tomcat会维护一个Servlet实例,而
Servle的执行是多线程的,会被多个并发请求调用,
为每个线程维护一个ThreadLocal型的session,
保证了session的在线程安全前提下的共享。 2 楼 myworkfirst 2007-12-12 建议你采有事务机制 3 楼 ghujki 2007-12-14 如果有lazy呢? 4 楼 uidin 2008-01-10 关注,对这个也有点不明白

读书人网 >软件架构设计

热点推荐