关于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 关注,对这个也有点不明白