Order do Hibernate

7 respostas
A

Pessoal

Estou com um problema com o Order do Hibernate.
Eu tenho as seguintes classes:

Departamento

private int    codigo;

private String descricao;
VendaDepartamentoDiaria

private int          id;

private Departamento departamento;

private Date         dataVenda;

O problema é que no meu DAO da classe VendaDepartamentoDiaria eu tenho um método getList que me retorna os registros do banco de dados, mas eu estou tentando trazer ordenado por departamento.descricao, já que a classe VendaDepartamentoDiaria possui um objeto Departamento, mas está dando erro. Se eu colocar no order somente o atributo departamento funciona, só que traz ordenado pelo código do departamento e não pela descrição.

Session session = getSession();

Criteria criteria = session.createCriteria(VendaDepartamentoDiaria.class);
criteria.add(Expression.eq("departamento", departamento));
criteria.add(Expression.between("dataVenda", dataInicial, dataFinal));

criteria.addOrder(Order.asc("departamento.descricao"));

Se eu mudar a linha do criteria.addOrder para:

criteria.addOrder(Order.asc("departamento"));

Ai num dá erro, mas traz em ordem de código do departamento e não pela descrição.

Alguém sabe como posso resolver este problema? (Sem usar HQL)

Valew

7 Respostas

Guilherme_Silveira

Tambem odeio HQL, nada melhor que orientacao a objeto nesses casos.

Uma solucao pratica no seu caso eh fazer a busca e ordenar com um comparator depois ja que voce esta trazendo todos mesmo.

Att

Guilherme Silveira

_fs

Esse é um problema chato pra caramba que só foi resolvido no Hibernate 3.

O lance é que usando a Criteria api, o Hibernate não faz os joins necessários automaticamente. Duas maneiras de resolver:

  1. http://sun.calstatela.edu/~cysun/documentation/hibernate/reference/en/html/querycriteria.html#querycriteria-associations
  2. Se o order-by é sempre igual, pode declará-lo no mapeamento do relacionamento
<bag lazy="true" name="departamento"
	inverse="true" order-by="DescricaoDepto desc"
	table="Tabela">
	<key column="etc" />
	<one-to-many class="etc" />
</bag>
A

A solução do Hibernate 3 funciona bem? É complexo de implementar?

Valew

_fs

Não sei, não estou usando ainda. Mas tenho certeza absoluta que resolveram.

E cara, o link que eu te passei explica como fazer. Olha aqui:

Criteria criteria = session.createCriteria(VendaDepartamentoDiaria.class);
criteria.add(Expression.eq("departamento", departamento));
criteria.add(Expression.between("dataVenda", dataInicial, dataFinal));

// ta-da
criteria.createAlias("departamento", "dpto").addOrder(Order.asc("dpto.descricao"));

Sacou?

Guilherme_Silveira

Dava para fazer ate sem o alias agora nao dava? Pelo menos eu bati o olho e achei que dava. Mas ficou bem legal

Nada como expressoes

Guilherme

_fs

Infelizmente não dá Guilherme :expressionless: trombei com esse problema faz algumas semanas … dureza para achar a solução hehe como você disse, parece correto.

Guilherme_Silveira

Poxa, que maldade
Agora mesmo fui ver minha ultima aplicacao e ta cheio de comparators e regras para resolver os problemas da ordenacao

Criado 22 de março de 2005
Ultima resposta 22 de mar. de 2005
Respostas 7
Participantes 3