Ordenação com Hibernate Critéria

10 respostas
G

Olá pessoal,
Tenho uma classe Funcionario que possui um atributo Pessoa
Public class Funcionario.......{
private Pessoa pessoa;
}

Tenho um método genérico para fazer um selectAll, onde passo o atributo que quero que seja feita a ordenação dos resultados, usando critéria.
Como posso fazer uma consulta que me retorne todos os funcionários, ordenados por nome (que é um atributo de Pessoa)? O método está assim:

public List<GDAOHI> selectAll(String ordem) {
        
        Session sessao = HibernateUtil.getSession();
        Criteria select = sessao.createCriteria(klass);
        select.addOrder(Order.asc(ordem));
        List<GDAOHI> dados = select.list();
        
        sessao.close();
        
      
        return dados;
        
    }

Se eu fizer por exemplo:
List funcionarios = selectAll("pessoa.nome"); ou
List funcionarios = selectAll("nome");

Ele não encontra a propriedade informada, pois nome não é uma propriedade de Funcionario e sim de Pessoa.

10 Respostas

L

pq ao invez de usar criteria vc simplismente nao coloca um order by no HQL creio que faz o mesmo e é mais facil…

P

Dica: abrir e fechar Session do Hibernate dentro do DAO não é uma boa prática.

A

Faz no HQL q fica bem mais imples :wink:

G

Obrigado pela dica. Sabe de algum artigo sobre isto? Onde seria o melhor lugar para abrir e fechar as sessões?

Quanto à consulta, achei que o Criteria tivesse algum método prático p/ isto… :?
Será que não tem?

Abraços.

C

plentz wrote:

cara vc poderia ser mais claro, pq não é uma boa prática ?

M

creio que utilizando o addOrder deve funcionar…

http://www.hibernate.org/hib_docs/v3/api/org/hibernate/Criteria.html#addOrder(org.hibernate.criterion.Order)

:stuck_out_tongue:

R

O addOrder passando o nome do parametro “navegavel” (tipo funcionario.pessoa.nome) funciona sim… eu utilizo essa abordagem em um genericDAO meu e funciona perfeitamente…

R

Cara eu também estou com esse problema.
Tenho que ordenar por um atributo da classe “principal”, e um atributo de um atributo dessa classe.
Tipo assim:

Classe Conta int id; Date dataVencimento; ContaTipo contaTipo;

Classe ContaTipo int id; String tipo;

Tenho que ordenar por: ContaTipo.tipo, Conta.dataVencimento

Mas se eu uso:

criteria.addOrder(Order.asc("dataVencimento")); criteria.addOrder(Order.asc("contaTipo.tipo"));
Não dá certo. Diz o erro:

Também tentei colocar:

e deu o mesmo erro.

Alguma sugestão?

R

Opa, resolvi meu problema baseado neste post:
http://guj.com.br/posts/list/21810.java#115493

Ficou assim:

criteria.createAlias("contaTipo", "ct").addOrder(Order.asc("ct.tipo")); criteria.addOrder(Order.asc("dataVencimento"));

Falow

E

Da uma olhada neste post !!
http://guj.com.br/posts/list/21810.java#115493

Criado 5 de março de 2007
Ultima resposta 8 de jan. de 2010
Respostas 10
Participantes 9