各位大侠,我用Spring+hibernate做后台,然后发布webservice,可是一段时间之后就无法查询了。贴上我的代码: Session session = sessionFactory.openSession();
session.beginTransaction();
List userlist = session.createQuery("from User").list();
session.getTransaction().commit();
//关闭session
if (session != null) {
if (session.isOpen()) {
session.close();
}
}
for(Iterator iter = userlist.iterator();iter.hasNext();){
User user = (User)iter.next();
System.out.print(user.getId());
}是这样的情况,我在UserManager类里面加了个SessionFactory,然后用Spring注入,创建Session,查询数据,关闭Session,为什么还会出现一段时间之后无法查询的情况?请各位大侠指点一二,不胜感激。

解决方案 »

  1.   

    那个不能算是错误吧,只要把tomcat重启下就一切OK了。个人认为是Session太多了引起的堵塞,求教如何解决这个问题。
      

  2.   

    session设置成静态全局,用一次清一次
      

  3.   

    怎么设置静态全局 
    private static SessionFactory sessionFactory;  public static session getSession(){...};
    这样?
      

  4.   

    一定要保证一个sessionFactory中只存在一个session实例,你的这个估计是创建了多个session对象,线程不安全了。
     private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); 
    public static void closeSession() throws HibernateException {  
            Session session = (Session) threadLocal.get();  
            threadLocal.set(null);  
            if (session != null) {  
                session.close();  
            }  
        }  
     public static void closeSession() throws HibernateException {  
            Session session = (Session) threadLocal.get();  
            threadLocal.set(null);  
            if (session != null) {  
                session.close();  
            }  
        }  
      

  5.   

     public static Session getSession() throws HibernateException {  
            Session session = (Session) threadLocal.get();  
            if (session == null || !session.isOpen()) {  
                if (sessionFactory == null) {  
                    rebuildSessionFactory();  
                }  
                session = (sessionFactory != null) ? sessionFactory.openSession()  
                        : null;  
                threadLocal.set(session);  
            }  
            return session;  
        }