Olá galera do GUJ, boa tarde! Tenho uma aplicação que recupera do banco de dados as permissões de usuário, todas as paginas que ele pode acessar. Destas páginas tb existe um menu que eh recuperado de acordo com o usuário. So que o hibernate não ordena naturalmente, vem sempre numa ordem diferente. Se alguém puder me ajudar sobre esta opção, eu agradeço.
Ordenar resultado de lista Hibernate
7 Respostas
Se você estiver lendo através de uma query HQL, basta adicionar uma cláusula ORDER BY à sua consulta para que os dados já venham ordenados. Se estiver usando Criteria, use o método addOrder():
http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/queryhql.html#queryhql-ordering
http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/querycriteria.html#querycriteria-ordering
Se preferir ordenar os dados DEPOIS de o Hibernate retorná-los, use Collections.sort() sobre sua lista de resultado passando um Comparator adequado.
Como você recupera a lista que gera o menu? Posta pra gente.
Se estiver usando uma query para pegar ops dados, pode adicionar o “order by” para ordená-la.
Se não, sugiro colocar os dados recuperados num ArrayList e usar a classe java.util.Collections para ordená-lo.
Se os seus objetos não implementam java.lang.Comparable, pode implementar um java.util.Comparator e passá-lo no método Collections.sort.
Se estiver usando uma query para pegar ops dados, pode adicionar o “order by” para ordená-la.
Se não, sugiro colocar os dados recuperados num ArrayList e usar a classe java.util.Collections para ordená-lo.
Se os seus objetos não implementam java.lang.Comparable, pode implementar um java.util.Comparator e passá-lo no método Collections.sort.
Correto, mas com o Hibernate ele está buscando com HQL ou Criteria, então é só usar as soluções postadas pelo Roger, onde os dados virão ordenados da base,o que será bem mais fácil, independente do mecanismo de busca!
Você tem razão, é que acabamos postando juntos a resposta. E o Cesimar ainda não disse como ele pega os dados. Dependendo de como for, ele não vai conseguir fazer usando HQL ou as funcionalidades do Hibernate. Só queria dar mais opções.
sussa
Foi mal pela demora galera. Meu colega aqui resolveu usando direto no mapeamento. Como o hibernate recupera a lista no set, os dados vem sorteados. Mas ai eh necessario apenas colocar a opcao order by na relação many-to-many que está sendo recuperada. Por exemplo eu tenho o objeto grupo que tem uma lista de paginas e a relacao de many to many, então eu coloco na lista que é recuperada, neste caso páginas:
<set name="papels" inverse="false" table="pagina_papel">
<key>
<column name="pagina" not-null="true" />
</key>
<many-to-many order-by="id" entity-name="br.com.maisdata.dominio.Papel">
<column name="papel" not-null="true" />
</many-to-many>
</set>
E resolvido o problema. Mais uma vez galera, muito obrigado!