日期:2014-05-20  浏览次数:20962 次

getHibernateTemplate().find(hql) 超卡,什么原因?(SSH)
SSH框架, 执行查询操作的时候 速度慢的要死,调试的时候卡到Dao层getHibernateTemplate().find(hql) 这段代码。能卡3——5分钟 不动

要查询的表中就1012 条数据 (5列), 应该不至于这么慢啊? 谁能解释下,应该怎么办啊 ???

一下是代码片段:

action:
Java code
List basicList = super.getRightBiz().findAllBasicDataByNoteId(-1);//查询所有基础数据 
        request.getSession().setAttribute("basicList", basicList);



biz:
Java code
public List findAllBasicDataByNoteId(int noteId) {
        String hql = "from BasicData where 1=1";
        //noteId 值为大于等于0时,根据上级目录ID查询
        if(noteId>=0){
            hql+=" and noteId ="+noteId;
        }
        return super.getBaseDao().findObject(hql);
    }


dao:
Java code
public List findObject(String hql) {
        try {
            return super.getHibernateTemplate().find(hql);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


------解决方案--------------------
探讨

引用:
将打印出来的的SQL语句直接放在数据库中执行下,看是否存在同样的问题。如果存在可以查看下查询计划,分下具体慢到哪了。

如果不存在,那么看下你的hibernate配置,比如关联关系什么的,是不是虽然你的意思是只执行一次查询,可实际hibernate框架因为你的设置需要其他额外的查询语句,导致查询慢。这个你可以看下输出SQL是否只有from BasicDa……