Ich habe habe bereits Paginierung mit dem folgenden Code implementiert:Paginierung mit Hibernate Kriterien und 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;
}
Wenn ich die SQL-Abfrage manuell und legt ihn in die Datenbank aufzubauen, erhalte ich 8 Ergebnisse. Allerdings, wenn ich den obigen Code versuche, bevor ich den ResultTransformer auf DISTINCT_ROOT_ENTITY setze, bekomme ich 8 Ergebnisse (ohne distinct) und nach der Einstellung bekomme ich 4 Ergebnisse. Aber ich sollte 8 Ergebnisse erhalten (mit DISTINCT), denn wenn ich das SQL manuell ohne distinct erstelle, bekomme ich 11 Ergebnisse und wenn ich DISTINCT richtig benutze, unterscheidet 8 Ergebnisse.
Was ist falsch mit dem obigen Code?
Ich wünsche ernsthaft, dass Ihre Variablen Namen NICHT in Portugiesisch waren :) –
Immer noch kann es nicht funktionieren .. Versucht FetchMode.SELECT zu allen * ToMany Sammlungen hinzuzufügen, aber immer noch ohne Ergebnis .. – nKognito
Vielen Dank! Es hat nicht nur für mich funktioniert, sondern ich suche seit einigen Tagen nach einer Lösung. Du hast die Lösung und die Erklärung gefunden! Ich habe diesen Beitrag wirklich sehr gemocht !!! – Alexandros