Ordenação com Hibernate Critéria

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:

[code]public List 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;
    
}[/code]

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.

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

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

Faz no HQL q fica bem mais imples :wink:

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.

plentz wrote:

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

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:

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…

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?

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

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