我在使用query进行分页查询时,遇到一个奇怪的问题,查不出是什么原因,请各位指教一下。代码:public String saveToHost(ReportBean reportBean) throws Exception
{
try
{
Session session = HibernateSessionFactory.getSession(); // 设置查询参数
Query query = reportBean.getQuery(); //这个是主要的query,事先创建好并存在bean里。
setParameters(reportBean.getConsMap(), query); //取得总记录
String string = query.getQueryString();
String countSql = "select count(1) from (" + string + ")";
Query countQuery = session.createSQLQuery(countSql);
setParameters(reportBean.getConsMap(), countQuery);
Long count = ((BigDecimal) countQuery.uniqueResult()).longValue();
//delta是每次查询的记录数
for (int i = 0; i < count; i += delta)
{
query.setFirstResult(i);
query.setMaxResults(delta);
List<Object[]> data = query.list();
for (Object[] objs : data)
{
//....
}
}
//....
}
}现象:第一次查询得到的结果(即0到delta条记录)是正常的,但之后查询得到的每条记录后面都会多一个数值,好像是行数,比如第1005条记录,后面就多了个字段1005。我调试的时候发现query.list()查出的0到delta条记录正常,之后的记录都多了那个数值。如果使用Query query = session.getNamedQuery(sqlString)这种方式的话,查到的结果就全部正常。不知道是什么原因造成的。
{
try
{
Session session = HibernateSessionFactory.getSession(); // 设置查询参数
Query query = reportBean.getQuery(); //这个是主要的query,事先创建好并存在bean里。
setParameters(reportBean.getConsMap(), query); //取得总记录
String string = query.getQueryString();
String countSql = "select count(1) from (" + string + ")";
Query countQuery = session.createSQLQuery(countSql);
setParameters(reportBean.getConsMap(), countQuery);
Long count = ((BigDecimal) countQuery.uniqueResult()).longValue();
//delta是每次查询的记录数
for (int i = 0; i < count; i += delta)
{
query.setFirstResult(i);
query.setMaxResults(delta);
List<Object[]> data = query.list();
for (Object[] objs : data)
{
//....
}
}
//....
}
}现象:第一次查询得到的结果(即0到delta条记录)是正常的,但之后查询得到的每条记录后面都会多一个数值,好像是行数,比如第1005条记录,后面就多了个字段1005。我调试的时候发现query.list()查出的0到delta条记录正常,之后的记录都多了那个数值。如果使用Query query = session.getNamedQuery(sqlString)这种方式的话,查到的结果就全部正常。不知道是什么原因造成的。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货