天天看点

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条结果也不应该这么慢吧。

[color=red] 请问应该怎么处理,大家遇到这样的问题了吗?[/color]

看网络上有人说用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)); // [b]可是在运行的时候,提示参数空[/b]

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网页显示该内容

请问上述问题应该怎么处理?十分感谢!!