Métodos com paginação

Pessoal gostaria da opinião de vocês em relação a métodos com paginação.
ex:


class GerenciadorVendas {
   public List<Venda> listarVendas(Date data, Cliente cliente, int pagina, int registrosPorPagina) {

   }
}

O Problema é que eu precisaria de retornar junto com o list o total de registros (total geral sem paginação) saber quantas páginas eu vou ter.

Como vcs fazem isto ?

Não faça, leia um registro a mais que o total de itens por página, de forma a saber se existe uma seguinte.

Não entendi sua solução!

Em situações como essa eu tendo a definir classe criterios de pesquisa para ser entrada, e classes resultados de pesquisa.

Na classe de resultado vc pode colocar o total de itens que sofreram a pesquisa, o numero da página que o resultado pertence, a ordem em que esta organizada o resultado. Derrepente vc pode até colocar o criterio utilizado para extrair o resultado.

E se isso é uma exigência do cliente ou usuário.
Se isso é um requisito do sistema .

Estava pensando em usar um List personalizado.


class PageableList implements List {
    private List list;
 
   public PageableList (List list) {
       this.list = list;
 
   } 
  
   public int getTotalPages() {

   }

   public void nextPage() {

   }

  // outros métodos eu delego.
  public Iterator iterator {
     return list.iterator;
 }   
   
   
}

Existe alguma coisa pronta e com hibernate para isto ?

Já fiz um projeto que usava isto.
O problema, quando vc pega uma equipe que acha que isso é um exagero.
Tentai criar classes de pesquisa e resultados personalizadas ´para cada entidade.
Me falaram que isso era exagerado e que eu tinha que fazer como a SUN “ensinava”.
O uníco problema é criar classes de pesquisa complexas com muitos relacionamentos.


  class ListaVenda {
      public int totalPaginas() {

      }

      public Iterator obterRegistros() {

      }
  }

  class FiltroVenda {
     public void filtrarPorData(Date data) {}

    public void filtrarPorCliente(Cliente cliente) {}

    public void setRegistrosPorPagina(int registros) {}

    public void setPagina(int pagina) {}
 
  }

 class GerenciadorVendas {
    public ListaVenda listarVendas(FiltroVenda filtroVenda) {
 
    }
 }

O problema é que vc não vai criar um para cada entidade, vc vai criar um que sirva para a maioria das entidades. Isso vai aumentar a reutilização de código.

Estou fazendo o projeto de estudo e derrepente vou implementar algo deste tipo.

Mas antes tenho que resolver este pepino aqui http://www.guj.com.br/posts/list/35942.java

[]s

Quando terminar pode postar aqui para a gente.
Gostaria de participar de algum projeto desses mas estou sem tempo atualmente.