ordenação de dados por hibernate

10 respostas
arcZend

fala galera, blz?

bom estou com um problema, eu possuo uma classe chamada universidade dentro de cada universidade tem uma lista de professores e em cada professor uma lista de alunos

isso tranquilo, 100%

o problema e que em determinado momento eu preciso buscar a lista de universidades e a lista de alunos dentro dos professores devem estar todos em ordem alfabética, eu tentei usar o “Order.asc” como vcs podem ver asseguir:

crit = session.createCriteria(Universidade.class, “u”).createAlias(“u.professores”, “p”).createAlias(“p.alunos”, “a”).addOrder(Order.asc(“a.nome”));

porem o que esta acontecendo é o seguinte, porem ele esta ordenando as universidades atraves dos nomes dos alunos, como eu resolvo isso suando criteria???

OBS: todo o sistema foi feito com criteria, por essa rasão não posso usar HQL

10 Respostas

rodrigocolasso

Bom dia ArcZend,

bom ele fez o que você pediu que ele fizesse… você colocou a ordem pelo nome do aluno … se você quer pela Universidade e depois pelo aluno, você deve adicionar order Uni, order Pro e por último order Aluno

arcZend

rodrigocolasso:
Bom dia ArcZend,

bom ele fez o que você pediu que ele fizesse… você colocou a ordem pelo nome do aluno … se você quer pela Universidade e depois pelo aluno, você deve adicionar order Uni, order Pro e por último order Aluno

cara agradeço a ajuda porem, eu não conheço esse “order uni” e “order pro”, vc poderia de dar uma dica de como ou onde eu chamo tais metodos

rodrigocolasso
arcZend:
rodrigocolasso:
Bom dia ArcZend,

bom ele fez o que você pediu que ele fizesse... você colocou a ordem pelo nome do aluno ... se você quer pela Universidade e depois pelo aluno, você deve adicionar order Uni, order Pro e por último order Aluno

cara agradeço a ajuda porem, eu não conheço esse "order uni" e "order pro", vc poderia de dar uma dica de como ou onde eu chamo tais metodos

hehhe são só exemplos tipo assim:

crit = session.createCriteria(Universidade.class, "u").createAlias("u.professores", "p").createAlias("p.alunos", "a").addOrder(Order.asc("u.nomeUni").addOrder(Order.asc("p.nomePro").addOrder(Order.asc("a.nome")); 

Assim ele primeiro vai ordenar por Universidade, depois por Professor e por último por Aluno.
paulo1911

Olá amigo, o amigo quiz dizer que você deve ordenar pela universidade e em sequancia professores e depois alunos… :smiley:

arcZend

[quote=rodrigocolasso][quote=arcZend]

rodrigocolasso:

crit = session.createCriteria(Universidade.class, "u").createAlias("u.professores", "p").createAlias("p.alunos", "a").addOrder(Order.asc("u.nomeUni").addOrder(Order.asc("p.nomePro").addOrder(Order.asc("a.nome")); 

Assim ele primeiro vai ordenar por Universidade, depois por Professor e por último por Aluno.

cara eu posso estar enganado + ao fazer "Order.asc("u.nomeUni")" eu não estariatentaria ordenando pelo atributi "nomeUni"????

quer dizer q para fazer isso eu teria q mudar o nome do atributo?????

isso não faz muito sentido

rodrigocolasso

[quote=arcZend][quote=rodrigocolasso]

arcZend:
rodrigocolasso:

crit = session.createCriteria(Universidade.class, "u").createAlias("u.professores", "p").createAlias("p.alunos", "a").addOrder(Order.asc("u.nomeUni").addOrder(Order.asc("p.nomePro").addOrder(Order.asc("a.nome")); 

Assim ele primeiro vai ordenar por Universidade, depois por Professor e por último por Aluno.

cara eu posso estar enganado + ao fazer "Order.asc("u.nomeUni")" eu não estariatentaria ordenando pelo atributi "nomeUni"????

quer dizer q para fazer isso eu teria q mudar o nome do atributo?????

isso não faz muito sentido

Não, eu só coloqueri nomeUni pq não sei o nome real do seu atributo, e o mesmo para nomePro, no lugar deles você coloca o seu atributo real

arcZend

paulo1911:
Olá amigo, o amigo quiz dizer que você deve ordenar pela universidade e em sequancia professores e depois alunos… :smiley:

seguindo essa linha de raciocinio eu fiz o seguinte:

crit = session.createCriteria(Universidade.class, “u”).createAlias(“u.profefessores”, “p”).createAlias(“p.alunos”, “a”);

crit = crit.addOrder(Order.asc(“u.nome”)).addOrder(Order.asc(“p.nome”)).addOrder(Order.asc(“a.nome”));

List<Universidade> lista = crit.list();

e o resultado continua sendo o mesmo do anterior, esta ordenando a lista de universidades apartiro do nome dos alunos

o nome do atributo é nome mesmo

rodrigocolasso

Tenta colocar groupBy, não sei como é a sintaxe no hibernate

arcZend

cara goupBy é para agrupar dados iguais e não para ordenar

ex:

em uma tabela aluno vc tem o aluno thiago cadastrado 3 vezes e + 2 alunos quaisquer, oq vc faz da groupBy(‘nome’) ai vai ficar assim o select:

thiago
ana
vitor

sem o broupBy apareceria assim

thiago
thiago
thiago
ana
vitor

rodrigocolasso

cara goupBy é para agrupar dados iguais e não para ordenar

ex:

em uma tabela aluno vc tem o aluno thiago cadastrado 3 vezes e + 2 alunos quaisquer, oq vc faz da groupBy(‘nome’) ai vai ficar assim o select:

thiago
ana
vitor

sem o broupBy apareceria assim

thiago
thiago
thiago
ana
vitor

Isso é verdade :oops:, falei sem pensar.

Bom do jeito que eu falei anteriormente é para funcionar, pelo menos na query do banco funciona, no hibernate já não sei … para mim assim funcionou

Criado 3 de agosto de 2011
Ultima resposta 3 de ago. de 2011
Respostas 10
Participantes 3