package cn.org.rapid_framework.page.impl; import java.util.ArrayList; import org.hibernate.Query; import org.hibernate.ScrollableResults; import cn.org.rapid_framework.page.Page; import cn.org.rapid_framework.page.PageRequest; /** * Hibernate分页信息 * * @author badqiu * @see BasePage */ @Deprecated public class Hibernate3Page extends Page { /** * 构建HibernatePage对象,完成Hibernate的Query数据的分页处理 * * @param query * Hibernate的Query对象 * @param pageNumber * 当前页编码,从1开始,如果传的值为Integer.MAX_VALUE表示获取最后一页。 * 如果你不知道最后一页编码,传Integer.MAX_VALUE即可。如果当前页超过总页数,也表示最后一页。 * 这两种情况将重新更改当前页的页码,为最后一页编码。 * @param pageSize * 每一页显示的条目数 */ public Hibernate3Page(Query query, int pageNumber, int pageSize) { super(pageNumber, pageSize,queryTatalCountByScrollableResults(query)); result = query.setFirstResult( (this.pageNumber - 1) * this.pageSize).setMaxResults( this.pageSize).list(); } public Hibernate3Page(Query query, PageRequest p) { this(query,p.getPageNumber(),p.getPageSize()); } /** * 构建HibernatePage对象,完成Hibernate的Query数据的分页处理 * * @param selectQuery * Hibernate的查询Query对象 * @param countQuery * Hibernate的查询总数据行数的Query对象 * @param pageNumber * 当前页编码,从1开始,如果传的值为Integer.MAX_VALUE表示获取最后一页。 * 如果你不知道最后一页编码,传Integer.MAX_VALUE即可。如果当前页超过总页数,也表示最后一页。 * 这两种情况将重新更改当前页的页码,为最后一页编码。 * @param pageSize * 每一页显示的条目数 */ public Hibernate3Page(Query selectQuery, Query countQuery, int pageNumber,int pageSize) { super(pageNumber, pageSize, ((Number)countQuery.uniqueResult()).intValue()); if(getTotalCount() == 0) { result = new ArrayList(0); }else { result = selectQuery.setFirstResult(getFirstResult()).setMaxResults(this.pageSize).list(); } } public Hibernate3Page(Query selectQuery, Query countQuery,PageRequest p) { this(selectQuery,countQuery,p.getPageNumber(),p.getPageSize()); } private static int queryTatalCountByScrollableResults(Query query) { ScrollableResults scrollableResults = query.scroll(); scrollableResults.last(); return scrollableResults.getRowNumber() + 1; } }