Obter total de resultados ao fazer paginação com Hibernate + JPA

Para realizar tal tarefa tive que fazer um select count(*). Alguém conhece outra forma?

Obrigado,
Felipe

Faz assim, por exemplo :

Query query = em.createQuery(“SELECT p FROM MyClass p”);
int qte_row = query.getResultList().size();
query.setFirstResult(0);
query.setMaxResults(10);

Há alguns jeitos. Aqui mais um:

Criteria crit = session.createCriteria(Product.class);
crit.setProjection(Projections.rowCount());
List results = crit.list();

[quote=Italivio]Faz assim, por exemplo :

Query query = em.createQuery(“SELECT p FROM MyClass p”);
int qte_row = query.getResultList().size();
query.setFirstResult(0);
query.setMaxResults(10);

[/quote]
Essa seria a melhor alternativa, mas quando faço getResultList().size() é feito fetch completo da lista

[quote=LIPE]Há alguns jeitos. Aqui mais um:

Criteria crit = session.createCriteria(Product.class); crit.setProjection(Projections.rowCount()); List results = crit.list(); [/quote]
Cheguei a esbarrar com essa forma quando estava pesquisando, mas no meu caso acho que ela não serve por dois motivos:

  • Estou usando JPA
  • A query pode ter cláusula where

No hibernate teriam duas formas: projections no criteria ou filters na query.

Na JPA, ate onde eu sei, nao tem como sem usar o count. JPA 2.0 vem para suprir essas pequenas necessidades.

Pessoal,

Esbarrei no mesmo problema! Alguma solução? ou será que vou ter que fazer algo como um SELECT COUNT ?

[]s

Utilize criteria. http://www.hibernate.org/hib_docs/v3/reference/en-US/html_single/#querycriteria

Gostaria de uma opção sem utilizar Criteria… Usando somente a especificação JPA

Acho que só com JPA 2 então, quando sair.