首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

hibernate查询query.list()回来结果速度很慢,请指点

2012-10-31 
hibernate查询query.list()返回结果速度很慢,请指点public List acquierByType(int typeid){Session s n

hibernate查询query.list()返回结果速度很慢,请指点
public List acquierByType(int typeid)
{
    Session s = null;
    try
    {
       String SQL = "from JacArea as area where area.AreaTypeTableID =:typeid
           and area.ValidFlag=1";
       s = HibernateUtils.currentSession();
       Query q = s.createQuery(SQL);
       q.setInteger("typeid", typeid);
       return q.list();
    } catch (HibernateException e)
    {
        e.printStackTrace();
    } finally
    {
    }
     return null;
}

    其中AreaTypeTableID是聚集索引,ValidFlag是索引,把查询语句直接在SQL server查询,速度很快没有问题,但当调用该函数的时候速度很慢,时间竟然达到3、4s,经过增加调试代码,发现就是return q.list()这句花费绝大部分时间,另外查询结果返回的数据不是很多,大概300条左右。因为我把返回结果用网页中的下拉框select显示,所以没有分页,但,我想300条结果也不应该这么慢吧。
  
  请问应该怎么处理,大家遇到这样的问题了吗?

    看网络上有人说用scroll()函数可以提高效率,可是关于ScrollableResults的用法在网上没有找到说明?后来看api但也不是很详细。还是不知道怎么处理。
    我试着编了一下把return q.list()改写为以下代码,不过,我感觉我这个写法应该是有问题的,
下面代码中area是数据库返回的结果集的一个,ScrollalbeResults.get()得到area的各列。
ScrollableResults t=q.scroll();
while(t.next())
{
model.JacArea area = new model.JacArea();
area.setId(t.getInteger(0));  // 可是在运行的时候,提示参数空
         area.setAreaName(t.getString(1));
area.setAreaTypeTableID((JacAreatype)t.get(2));
area.setAreaNameID(t.getString(3));
area.setValidFlag(t.getInteger(4));
l.add(area);  //已经在函数开始声明为List类型
}
return l;

另外,我的应用是web,通过jsp网页显示该内容
请问上述问题应该怎么处理?十分感谢!!
1 楼 抛出异常的爱 2007-08-02   先打印不传到web上。。。。
分析一下。。。
用list返三百应该没什么问题。
你的表结构是怎么样的? 2 楼 desertriver 2007-08-02   十分感谢。
我的表结果比较简单,结构如下

属性IdAreaNameAreaTypeTableIdAreaNameIdValidFlag
类型intvarchar    int             varharint
长度4300     4                 504


这个语句的时间为3-4s,但是由于网页有四个这样的语句,总共就henduoi时间了,因为参数AreaTypeTableId不同。

另外你说的先打印能否详细点。另外我就是上面的这个函数在java文件进行调试也这样费时间


热点排行