Problema com a paginação do hibernate

8 respostas
M

Galera, detectei algo que crieo eu seja um bug. Vejam so, se eu faço uma consulta simples usando HQL ou Criteria do tipo:

certo, isso me retorna os registros ordenados por nomTipoRua, ai os registros vem nessa ordem:

79 49 77 1 86 85 38 62 88 87 (Esse numeros é a chave primaria da tabela Rua)

Veja que tem 10 registros ae, agora se eu pagino isso, pedindo de 0 a 5, ou seja:

query.setFirstResult(0);
query.setMaxResults(5);

usando o mesmo hql, olha a sequencia q eu tenho:

86 77 1 49 79

Nada haver isso, deveria vim: 79 49 77 1 86

Pq isso acontece? Se nao é um bug, o q eu estou fazendo de errado? Agradeço a ajuda desde já :slight_smile:

Abraços

8 Respostas

C

Os elementos esperados estão vindo, só não estão ordenados.

M

Na verdade nao vem em ordem nenhuma, se eu listar todos os registro sem paginacao, a ordem eh diferente do q eu mandar pegar todos usando paginacao. Dando o order by fica mais diferente ainda. A verdade é q o retorno da paginacao ta errado. Tem hora q os elementos se repetem em uma paginacao pra outra. Totalmente bugado.

M

Olha so, fiz uma paginacao de 0 a 10 os resultados foram:

85 86 77 49 1 79 1 84 88 68

Depois de 10 a 15

70 84 88 68 66

Veja que o registro 88, 84 e 68 se repetiram, ou seja, os 3 ultimas da ultima paginacao apareceu em uma sequencia nada haver. A consulta eh a mesma, so mudou a paginacao. :confused:

rodrigo.manfre

Cara eu estou com o mesmo problema.

Minha paginação funciona perfeitamente, está trazendo os dados paginados corretamente, porém quando eu uso alguma ordenção que é parâmetro que vem do Datatables para utilizar na minha query, apesar de colocar os valore corretamente e inclusive mostrar no log a instrução correta, os dados não vem ordenados corretamente, é muito estranho e já tem alguns dias que estou me batendo com isso.

Alguém tem alguma ideia?

Obrigado

M

Caramba, isso faz muito tempo cara, rs…
Mais eu lembro deste problema, era um bug mesmo no dialect do Oracle, eu nao sei se esse bug ainda existe pois a muito tempo nao uso oracle, uso postgres, mais eu resolvi sobrescrevendo o dialect do oracle e colocando a forma correta de fazer paginação, porque o oracle nao tem paginação nativa, vc tem que fazer uma subquery que eu nao tenho mais ela aqui atualmente. Você tambem está usando o Oracle? Se sim pode ser que seja o mesmo problema.

rodrigo.manfre

Eu sei que faz tempo kkk, mas como tive esse problema agora, estava pesquisando se alguém passou pelo mesmo problema que eu e achei esse post, então resolvi perguntar :smiley:

Eu estou utilizando o oracle sim, mas de qualquer forma vou continuar dando uma pesquisada

Obrigado

M

Entao o problema provavelmte eh o mesmo, dialect bugado. Procura uma forma de fazer paginacao no oracle e testa ela pra ver se da os resultados corretos. Se sim tu sobre carrega a classe do dialect do oracle e faz o ajuste no metodo de paginacao, eh bem simples.

rodrigo.manfre

Só para avisar que eu resolvi meu problema.

A query estava correta, o que estava acontecendo é que os dados dessa query eram jogado para um List<T> e inspecionando os objetos estavam todos ordenados, o detalhe erra que tinha uma outra rotina que faz um trabalho em cima dessa lista e jogava tudo para um Collection, porém o Collection não mantem a ordem.

Bom, o meu problema era isso

Obrigado

Criado 19 de maio de 2008
Ultima resposta 6 de ago. de 2014
Respostas 8
Participantes 3