解决方案 »

  1.   

    是不是你在查User的时候发出了很多的关联查询,建议将所有的关联对象都设置为延迟加载
      

  2.   

    你用生成的SQL在数据库那边执行一下  看看效率
      

  3.   


    额  不是很懂你的意思
    你把hibernate的sql打印打开,你User实体里面是不是很多关联对象,你看看你控制台是否发出了很多的关联查询
      

  4.   


    额  不是很懂你的意思
    你把hibernate的sql打印打开,你User实体里面是不是很多关联对象,你看看你控制台是否发出了很多的关联查询
    Hibernate: select user0_.UserId as UserId2_, user0_.UserName as UserName2_, user0_.Name as Name2_, user0_.Password as Password2_, user0_.PartOfDepartment as PartOfDe5_2_, user0_.PartOfRole as PartOfRole2_, user0_.Tel as Tel2_, user0_.Email as Email2_, user0_.LawID as LawID2_, user0_.PartOfPost as PartOfPost2_, user0_.UserStatus as UserStatus2_ from mm_User user0_ where user0_.UserId=9应该没把 
      

  5.   


    没问题  很快就出来了 就300多条数据那你还是从代码上找原因  个人觉得用spring和hibernate  一个方法你能写出这么多行  这就不合理
      

  6.   


    没问题  很快就出来了 就300多条数据那你还是从代码上找原因  个人觉得用spring和hibernate  一个方法你能写出这么多行  这就不合理
      

  7.   


    额  不是很懂你的意思
    你把hibernate的sql打印打开,你User实体里面是不是很多关联对象,你看看你控制台是否发出了很多的关联查询
    Hibernate: select user0_.UserId as UserId2_, user0_.UserName as UserName2_, user0_.Name as Name2_, user0_.Password as Password2_, user0_.PartOfDepartment as PartOfDe5_2_, user0_.PartOfRole as PartOfRole2_, user0_.Tel as Tel2_, user0_.Email as Email2_, user0_.LawID as LawID2_, user0_.PartOfPost as PartOfPost2_, user0_.UserStatus as UserStatus2_ from mm_User user0_ where user0_.UserId=9应该没把 
    什么叫应该没,有没有楼主看控制台就看到了啊。如果都没有关联查询不会有,那楼主要确定下是否真的是query.list执行很久了,因为你的sql在数据库执行很快的
      

  8.   

    用in 查询吧,一条一条直线本来就很慢的,一条要0.01秒,那100条就是1秒了,速度可想而是,二用in操作是很快的。
      

  9.   


    额  不是很懂你的意思
    你把hibernate的sql打印打开,你User实体里面是不是很多关联对象,你看看你控制台是否发出了很多的关联查询
    Hibernate: select user0_.UserId as UserId2_, user0_.UserName as UserName2_, user0_.Name as Name2_, user0_.Password as Password2_, user0_.PartOfDepartment as PartOfDe5_2_, user0_.PartOfRole as PartOfRole2_, user0_.Tel as Tel2_, user0_.Email as Email2_, user0_.LawID as LawID2_, user0_.PartOfPost as PartOfPost2_, user0_.UserStatus as UserStatus2_ from mm_User user0_ where user0_.UserId=9应该没把 
    什么叫应该没,有没有楼主看控制台就看到了啊。如果都没有关联查询不会有,那楼主要确定下是否真的是query.list执行很久了,因为你的sql在数据库执行很快的
    是 query.list 的 问题    我在它的前后输出过 是这句话很慢
      

  10.   

    能把你的输出打印出来吗
    System.out.println("1");
    List<User>list=query.list();
    System.out.println("2");就是这样呀   1一下就出来了  2隔了好久才出来的
      

  11.   

    List<User>list=query.list(); 多少条数据?
      

  12.   


    一条  根据id查找 肯定是只有一条   数据库里有300多条你先换成简单jdbc用select直接查询看看需要多长时间。
      

  13.   


    一条  根据id查找 肯定是只有一条   数据库里有300多条你先换成简单jdbc用select直接查询看看需要多长时间。我写了个同样的方法  不是从最上面的方法里面开始调的 那样就很快了 会不会 两个session的问题呀
      

  14.   

    既然使用了HibernateTemplate,为什么不使用getCurrentSession方法,还有自己去开启session
      

  15.   


    .openSession()不是和getCurrentSession不能一起用的呀
      

  16.   

    还没等query.list() 值回来的时候  多运行几下 会死     值回来之后 速度就很快了
      

  17.   

    还没等query.list() 值回来的时候  多运行几下 会死     值回来之后 速度就很快了
    我是说多运行几次findUsername(int id)这个方法,比如循环10次?你在运行这个方法之前是否运行了一些hibernate的save或者update(在一次请求期间)?
      

  18.   

    还没等query.list() 值回来的时候  多运行几下 会死     值回来之后 速度就很快了
    我是说多运行几次findUsername(int id)这个方法,比如循环10次?你在运行这个方法之前是否运行了一些hibernate的save或者update(在一次请求期间)?它好想 一开始就运行10次的  主要我第一个方法 是取前10条数据   然后去每一条数据的时候都运行一次下面的方法
         没运行过 登录界面进来就是运行我的方法了
      

  19.   

    那直接运行一下呢?比如在某个单独的jsp里面直接写一段调用此方法的代码?我怀疑是spring事务管理的bug导致的。
      

  20.   


    我试了下 还是很慢
    哎,lz比较倒霉啊。这按说不至于的。实在不行只能看看单独使用hibernate,不用spring。
      

  21.   


    我试了下 还是很慢
    哎,lz比较倒霉啊。这按说不至于的。实在不行只能看看单独使用hibernate,不用spring。 我觉得是不是  调了2次 session 的缘故呀
      

  22.   

    String hql="from User u where u.userId="+id;
            Session session=this.getHibernateTemplate().getSessionFactory().openSession();         
    Query query=session.createQuery(hql);
            List<User>list=query.list();   //这条运行的很慢 要9秒
            String name=list.get(0).getName();
            session.clear();
            session.close();
    哪儿有2次?再说2次也应该没事
      

  23.   


    这个方法 不是从另一个方法 开始调用的呀 那个方法 也有session 
      

  24.   

    我之前跟你说的,在单独jsp调用这个方法进行测试,难道你也调了别的方法?
      

  25.   

    仔细看了代码感觉代码很乱没有分层,spring注入也没用到。
    openSession();
    session.clear();
    session.close();操作在循环里面执行次数很多
      

  26.   

    while (iterator1.hasNext()){
                st = new LeaveOrOtKindbean();
                Object[] object = (Object[]) iterator1.next();
                LeaveOrOt l=(LeaveOrOt) object[0];
                LeaveOrOtKind lk=(LeaveOrOtKind) object[1];
                User u =(User) object[2];
                 
                approvalName=findUsername(l.getApprovalID1());  //每次循环都打开一个新的session,连接池都会爆掉,不慢才怪
     
                st.setApprovalName(approvalName);
                list1.add(st);           
                 
                 
        }
    还是采用spring的代理类来管理事务吧,不会百度
      

  27.   

    你这个可能是session上出的问题,你可以配置直接使用getCurrentSession代替openSession,配置TransactionManager,让spring管理session试试。
    .openSession()不是和getCurrentSession不能一起用的呀
      

  28.   

    我已经知道错那了  openSession() 调用了太多次  
    approvalName=findUsername(approvalID,session);public String findUsername(int id ,Session session){ //通过id 获得user表的name
        String hql="from User u where u.userId="+id;
       // Session session=getHibernateTemplate().getSessionFactory().openSession();  //getCurrentSession();获取当前存在的 
    Query query=session.createQuery(hql);
    List<User>list=query.list();
    String name=list.get(0).getName();
    return name;
    }改成这样就可以了
      

  29.   

    说了半天,lz没有按照我说的直接测试findUsername方法啊