he ya han implementado la paginación usando el siguiente código:paginación con los Criterios de Hibernate y DISTINCT_ROOT_ENTITY
public Paginacao<Anuncio> consultarPaginado(int pagina, Integer cidadeId) {
Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Anuncio.class);
criteria.add(Restrictions.eq("ativo", true));
criteria.add(Restrictions.eq("statusLiberacao", AnunciosUtil.STATUS_ANUNCIO_LIBERADO));
criteria.add(Restrictions.eq("statusVendaAnuncio", AnunciosUtil.STATUS_VENDA_ANUNCIO_DISPONIVEL));
if (cidadeId != null) {
criteria.add(Restrictions.eq("cidade.id", cidadeId));
}
criteria.addOrder(Order.desc("dataPostagem"));
criteria.setProjection(Projections.rowCount());
Long count = (Long) criteria.uniqueResult();
Paginacao<Anuncio> paginacao = new Paginacao<Anuncio>();
int qtdPaginas = (count.intValue()/7) + 1;
paginacao.setQtdPaginas(qtdPaginas);
criteria.setProjection(null);// reseta a criteria sem a projeção
criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
if (pagina > qtdPaginas) {
pagina = qtdPaginas;
}
pagina = pagina - 1;
criteria.setFirstResult(pagina * ConstantesGenericas.MAXIMO_OBJETOS_RETORNADOS);
criteria.setMaxResults(ConstantesGenericas.MAXIMO_OBJETOS_RETORNADOS);
paginacao.setRegistros(criteria.list());
return paginacao;
}
Cuando construyo la consulta SQL de forma manual y lo presentará a la base de datos, me sale 8 resultados. Sin embargo, cuando pruebo el código anterior, antes de configurar ResultTransformer en DISTINCT_ROOT_ENTITY, obtengo 8 resultados (sin distinción) y después de configurarlo obtengo 4 resultados. Pero debería obtener 8 resultados (usando DISTINCT), porque cuando construyo el SQL manualmente sin distintivo obtengo 11 resultados y cuando uso DISTINCT obtengo correctamente, 8 resultados diferentes.
¿Qué pasa con el código anterior?
Realmente deseo que sus nombres de variables NO estuvieran en portugués :) –
Todavía no puedo hacer que funcione .. Intenté agregar FetchMode.SELECT a todas las colecciones * ToMany pero aún sin resultado ... – nKognito
¡Gracias! no solo funcionó para mí, sino que he estado buscando una solución por algunos días. ¡Encontraste la solución y la explicación! ¡Realmente me gustó esta publicación! – Alexandros