分页查询的方法:private int firstResult = 0;
private int maxResults = 1000;public List findListByPropertyAndPage(Class oClass, String sPropertyName, Object oValue, Order order) {
Session session = this.gSession(); 
Criteria oCriteria = session.createCriteria(oClass);
oCriteria.add(Expression.eq(sPropertyName, oValue));
oCriteria.addOrder(order);
oCriteria.setFirstResult(this.firstResult);
oCriteria.setMaxResults(this.maxResults);
List oList = oCriteria.list();
session.close();
return oList;

}[WARN] 2010-07-22 09:32:25[520062] [org.hibernate.util.JDBCExceptionReporter] SQL Error: 0, SQLState: null
[ERROR] 2010-07-22 09:32:25[520062] [org.hibernate.util.JDBCExceptionReporter] 只进 ResultSet 不支持请求的操作。
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:2216)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
at com.cms.logic.impl.AbstractLogicImpl.findAllListByPage(AbstractLogicImpl.java:230)
at com.cms.logic.impl.NewsLogicImpl.findListByPage(NewsLogicImpl.java:74)
at com.cms.service.impl.NewsServiceImpl.findListByPage(NewsServiceImpl.java:73)
at com.cms.action.NewsAction.findListByPage(NewsAction.java:122)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:434)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:273)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:235)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doInterceptCaused by: com.microsoft.sqlserver.jdbc.SQLServerException: 只进 ResultSet 不支持请求的操作。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.throwNotScrollable(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.verifyScrollable(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.absolute(Unknown Source)
at org.apache.commons.dbcp.DelegatingResultSet.absolute(DelegatingResultSet.java:335)
at org.hibernate.loader.Loader.advance(Loader.java:1478)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1792)
at org.hibernate.loader.Loader.doQuery(Loader.java:674)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2213)
... 137 more

解决方案 »

  1.   

    Criteria 基本没用过
    是你的sql语句有问题吧,好好检查一下
    我觉得你这个 session 在这个方法里面获得不太好
    应该把seesion传进来比较好,然后在service层 控制session的开启和关闭
      

  2.   

    oCriteria.add(Expression.eq(sPropertyName, oValue));
    这句话 改成
    oCriteria.add(Restrictions.eq(sPropertyName, oValue));试试吧
    不太了解 Criteria
      

  3.   

    我已经解决了。
          this.first= (this.page-1)*this.size;这里出问题了
    如果,数据库中没有数据,你传过来的值小于1的话,就会出现那样的异常
    if(page>=1){
    this.first= (this.page-1)*this.size;
    }else{
    this.first=1;
    }                       -------------改成这样就可以了。