Пагинация с критериями Hibernate и 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;
        }

Когда я создаю SQL запрос вручную и отправить его в базу данных, я получаю 8 результатов. Однако, когда я пробую приведенный выше код, перед установкой ResultTransformer в DISTINCT_ROOT_ENTITY e получаю 8 результатов (без отдельных), а после его установки я получаю 4 результата. Но я должен получить 8 результатов (используя DISTINCT), потому что, когда я создаю SQL вручную без различения, я получаю 11 результатов, а когда я использую DISTINCT, я получаю правильно, 8 отличий результатов.

Что не так с приведенным выше кодом?

15
задан Mikko Maunu 23 June 2014 в 05:08
поделиться