java获取hibernate select查询的结果计数(返回对象的查询未选择计数(*))
我有一个HQL查询
String q = "From TMainTable where a= ? and b= ? and c=?"
Query q = session.createQuery(q).setParameter(0,1).setParameter(1,2).setParameter(2,3);
int count = getCount(q);
List<TMainTable> list = q.setFirstResult(pageNo).setMaxResults(maxLimit).list()
public int getCount(Query q){
return q.list().size();
}
但是getCount方法花费了太多时间。假设我的表有10000行,而实际计数一次只能得到20条记录。使用查询对象获取计数的最快方法是什么
我在getCount函数中尝试过这个
public Long getCount(Query q){
String queryString = q.getQueryString();
String countQueryString = "Select count(*) From "+queryString.substring(0, q.getQueryString().indexOf(" From"));
System.out.println(countQueryString);
Long c= (Long)ctx.getSession().createQuery(countQueryString).uniqueResult();
return c;
}
但是如何在新查询中设置参数呢?有没有办法只改变查询对象中的查询字符串
# 1 楼答案
按照惯例,您将有两个查询,一个用于正式计数(*),另一个用于实际查询。主查询获得结果数的唯一方法是完全执行,然后对结果列表进行计数,这将非常缓慢
# 2 楼答案
试试这个:
# 3 楼答案
您应该看看hibernate生成了什么样的sql。这可能非常低效。如果是这样,您应该编写本机sql查询
# 4 楼答案
必须设置以1开头而不是以0开头的参数:
相反,你必须使用:
其次,要获得列表的大小,可以使用如下
getResultList().size
: