Aqui na empresa nós utilizamos muito o Criteria.setMaxResults() para paginação. Eu criei um método para fazer uma busca por protótipo com o Hibernate e estou agora com um problema curioso. Esse método não suportava atributos que representassem coleções; o problema começou a aparecer quando isso foi implementado. Exemplo:
A classe Solicitacao possui um atributo List e a classe ItemSolicitacao tem o atributo da classe Produto. Para fazer a pesquisa, eu preencho o objeto solicitacao, inicializo a lista itensSolicitacao e adiciono um objeto itemSolicitacao com o produto preenchido. Reparei que, ao fazer uma busca adicionando o nome do produto, caso existisse mais de um itemSolicitacao com aquele produto dentro de uma solicitacao, esta solicitacao aparecia repetida. Um amigo meu deu a dica e percebi que era um problema de uso de DISTINCT. Fiz uma busca no google e adicionei a seguinte linha:
criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
Com isso o problema foi resolvido, ele não repetia os objetos que mencionei. Mas causou outro problema. Como falei no título do post, utilizo o método Criteria.setMaxResults() para paginação. A idéia é listar 15 objetos solicitacao por vez, mas ao invés de contar para solicitacao, o Hibernate agora conta para itemSolicitacao. Ou seja, se eu tenho objetos 10 solicitacao, cada um com 5 objetos itemSolicitacao, ele não mostra todos os 10 objetos solicitacao, mostra apenas 3 (3 x 5 = 15 objetos itemSolicitacao).
Alguém sabe como resolver isso, como colocar o maxResults para solicitacao e nao itemSolicitacao?
abração pra vcs!
