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网页显示该内容
请问上述问题应该怎么处理?十分感谢!!
{
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网页显示该内容
请问上述问题应该怎么处理?十分感谢!!