论坛首页 入门技术论坛

关于hibernate session管理的一些问题

浏览 1912 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-12-12  
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管理的方法,大家都来说说。
   发表时间:2007-12-12  
明白了一些,Tomcat会维护一个Servlet实例,而
Servle的执行是多线程的,会被多个并发请求调用,
为每个线程维护一个ThreadLocal型的session,
保证了session的在线程安全前提下的共享。
0 请登录后投票
   发表时间:2007-12-12  
   建议你采有事务机制
0 请登录后投票
   发表时间:2007-12-14  
如果有lazy呢?
0 请登录后投票
   发表时间:2008-01-10  
关注,对这个也有点不明白
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics