HibernateとEJB3によるページング処理のサンプルコード

public class Page {

  private List results;
  private int pageSize;
  private int page;

  public Page(Query query, int page, int pageSize) {
    this.page = page;
    this.pageSize = pageSize;
    results = query.setFirstResult(page * pageSize).setMaxResults(pageSize+1).list();
  }

  public boolean isNextPage() {
    return results.size() > pageSize;
  }

  public boolean isPreviousPage() {
    return page > 0;
  }

  public List getList() {
    return isNextPage() ? results.subList(0, pageSize-1) : results;
  }

}