public SearchResult findPageByCriteriaWithProjection (final FSDetachedCriteria detachedCriteria, final int pageSize,   
            final int startIndex) {   
        return (SearchResult) getHibernateTemplate().execute(new HibernateCallback() {   
            public Object doInHibernate(Session session) throws HibernateException {   
             Criteria criteria = detachedCriteria.getDetachedCriteria().getExecutableCriteria(session);   
                if(detachedCriteria.getOrder() != null) {
                 criteria.addOrder(detachedCriteria.getOrder());
                }
                
                // Get total count
                int totalCount = 0;
                ScrollableResults sr = criteria.scroll();
                if (sr.last()) {
                 totalCount = sr.getRowNumber() + 1;
                }                
                List items = criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();
                SearchResult ps = new SearchResult(items, totalCount);
                criteria.setProjection(null);
                return ps;   
            }   
        }, true);   startIndex 需要你自己计算下
    }

解决方案 »

  1.   

    这个不牵扯到分页的问题....这个方法我主要接收一个sql语句..一个开始行数 和结束行数...分页我在业务层进行控制...具体要怎么做????????
      

  2.   

    在hibernate中设置开始行数和最大读出行数就好了啊
      

  3.   

    方法是这样写的
    public class Test extends HibernateDaoSupport{ public List getLimitListByOptimizeHQL(final String hql, final Object[] queryParams, final int start, final int limit) {
    final int showCount = limit;
    final String str_hql="select * from tbepisteme";
    final Object[] obg_queryParams=null;
    final int int_start=0;
    final int int_limit=10;
    return getHibernateTemplate().executeFind(new HibernateCallback() {
    public Object doInHibernate(Session s) throws HibernateException, SQLException {

    Query query = s.createSQLQuery(str_hql);
    // if(queryParams!=null)
    // {
    // for (int i = 0; i < queryParams.length; i++) {
    // query.setParameter(i, queryParams[i]);
    // }
    // }
    query.setFirstResult(int_start);
    query.setMaxResults(int_limit);
    System.out.println("aaaaaaaaaaa");
    List list = query.list();
    System.out.println("lsit"+list.size());
    return list;
    }
    });
    }
    }
    一运行就报这样的错误:
    WARN - Unhandled Exception thrown: class org.springframework.orm.hibernate3.HibernateQueryException
    2008-7-25 9:57:21 org.apache.catalina.core.ApplicationContext log
    信息: org.springframework.orm.hibernate3.HibernateQueryException: addEntity() or addScalar() must be called on a sql query before executing the query. [select * from tbepisteme]; nested exception is org.hibernate.QueryException: addEntity() or addScalar() must be called on a sql query before executing the query. [select * from tbepisteme]请大家给小弟指出错误所在....不剩感激!!!!
      

  4.   

    // if(queryParams!=null) 
    // { 
    // for (int i = 0; i < queryParams.length; i++) { 
    // query.setParameter(i, queryParams[i]); 
    // } 
    // } 
    注释去掉。
    final String str_hql="select * from tbepisteme"; 
    好像这个有问题,格式是不是要想下面这样:
    "select * from tbepisteme where id=? "; 
    如果有两个参数可以是id=?and name=?
    当然不一定是id和name,这里这是举例而已。
    试一下。
      

  5.   

    Query query=session.creatQuery(hql);
    query.setFirstResult(begin);  //起始记录,就是从数据库第几条记录开始
    query.setMaxResults(count);   //从起始记录开始读去多少条记录