源码:
Query query = session.createQuery(hql);
if(firstindex!=-1&&maxresult!=-1){
query.setFirstResult(firstindex);
query.setMaxResults(maxresult);
}
List<T> temp = query.list();
qr.setResultList(temp);
qr.setTotalrecord(temp.size());
报错:
org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:2148)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
at org.hibernate.loader.Loader.list(Loader.java:2024)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at com.util.db.BaokuQuery.getScrollData(BaokuQuery.java:31)
at com.baokubiz.systemset.account.logic.implement.AccountServiceImpl.findByNameAndCid(AccountServiceImpl.java:852)
at com.baokubiz.systemset.account.controllers.AccountOSAction.accountlist_unsort(AccountOSAction.java:1984)
Caused by: java.sql.SQLException: ResultSet may only be accessed in a forward direction.
at net.sourceforge.jtds.jdbc.JtdsResultSet.checkScrollable(JtdsResultSet.java:316)
at net.sourceforge.jtds.jdbc.JtdsResultSet.absolute(JtdsResultSet.java:713)
原因:
query.setFirstResult(firstindex);
query.setMaxResults(maxresult);
在sqlserver中,firstindex\maxresult两个参数不能为负数。
参考资料:http://www.iteye.com/post/153764
修改方案:
Query query = session.createQuery(hql);
if(firstindex>=0&&maxresult>=0){
query.setFirstResult(firstindex);
query.setMaxResults(maxresult);
}
List<T> temp = query.list();
qr.setResultList(temp);
qr.setTotalrecord(temp.size());