ResultSet may only be accessed in a forward direct

本文介绍了一个关于SQLServer中使用Hibernate进行分页查询时出现的问题及解决方法。错误原因是由于设置了非法的分页参数导致查询失败。文章提供了修正后的代码实现,并附上了参考链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源码:

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());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值