ho hanno già implementato la paginazione utilizzando il seguente codice:Impaginazione con criteri di Hibernate e 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;
}
Quando costruisco la query SQL manualmente e lo presenta alla banca dati, ottengo 8 risultati. Tuttavia, quando provo il codice sopra, prima di impostare il ResultTransformer su DISTINCT_ROOT_ENTITY, ottengo 8 risultati (senza distinti) e dopo averlo impostato ottengo 4 risultati. Ma dovrei ottenere 8 risultati (usando DISTINCT), perché quando costruisco l'SQL manualmente senza distinzione ottengo 11 risultati e quando uso DISTINCT ottengo correttamente, 8 distingue i risultati.
Cosa c'è che non va nel codice sopra?
Mi auguro seriamente che i nomi delle variabili NON siano in portoghese :) –
Ancora non riesco a farlo funzionare .. Ho cercato di aggiungere FetchMode.SELECT a tutte le raccolte * ToMany ma ancora senza risultato .. – nKognito
Grazie! non solo ha funzionato per me, ma ho cercato una soluzione da qualche giorno. Hai trovato la soluzione e la spiegazione! Mi è veramente piaciuto questo post !!! – Alexandros