Duvidas com Criteria + ordenar [RESOLVIDO]

8 respostas
vcsmetallica

Galera, estou tentando buscar os dados de uma tabela com criteria.

Criteria criteria =  session.createCriteria(Transmissao.class, "transmissao");
ProjectionList proList = Projections.projectionList();
proList.add(Projections.property("dataUltimaTransmissao"));
proList.add(Projections.groupProperty("equipamento.imei"));
criteria.setProjection(proList);
criteria.addOrder(Order.desc("dataUltimaTransmissao"));
List  list = criteria.list();

Quando eu rodo a minha aplicação esta trazendo as minhas datas normalmentes, na ordem da menor para maior e eu quero da maior para menor.

Att

8 Respostas

D

1. Criteria criteria = session.createCriteria(Transmissao.class, "transmissao"); ProjectionList proList = Projections.projectionList(); proList.add(Projections.property("dataUltimaTransmissao")); proList.add(Projections.groupProperty("equipamento.imei")); criteria.setProjection(proList); criteria.addOrder(Order.desc("this.dataUltimaTransmissao")); List list = criteria.list();

Tenta assim.

vcsmetallica

Daniel F

Fiz o que vc recomendou e deu o seguinte erro:

Caused by: org.hibernate.QueryException: could not resolve property: this of: Transmissao
vcsmetallica

Estou achando que minha logica nao deu muito certo
abaixo o sql que esta sendo gerado:

select
        this_.idtransmissao as y0_,
        this_.niveldesinal as y1_,
        this_.statusconexaogps as y2_,
        this_.statusconexaoservidor as y3_,
        this_.statusignicao as y4_,
        this_.dataultimatransmissao as y5_,
        this_.equipamento_idequipamento as y6_,
        this_.pacoteconexao as y7_,
        equipament1_.imei as y8_ 
    from
        transmissao this_ 
    left outer join
        equipamento equipament1_ 
            on this_.equipamento_idequipamento=equipament1_.idequipamento 
    group by
        equipament1_.imei
    order by
        this_.dataultimatransmissao desc
D

Você criou um apelido para seu this, o correto transmissão:

Criteria criteria =  session.createCriteria(Transmissao.class, "transmissao");  
    ProjectionList proList = Projections.projectionList();  
    proList.add(Projections.property("dataUltimaTransmissao"));  
    proList.add(Projections.groupProperty("equipamento.imei"));  
    criteria.setProjection(proList);  
    criteria.addOrder(Order.desc("transmissao.dataUltimaTransmissao"));  
    List  list = criteria.list();

Assim vai funcionar.

vcsmetallica

DanielF,

Estou achando que é alguma coisa com relação ao banco, pq quando mando dar o group by mesmo via SQL ele, esta
agrupando pelas menores datas. Mesmo eu nao usando o order by.

Abaixo esta os dados que estao na minha tabela, sei que esse topico nao trata de SQL, mas vai que alguem ja teve um problema igual.

Apliquei a seguinte SQL no mysql:

SELECT *  FROM transmissao  order by dataultimatransmissao desc

Resultado

idtransmissao         equipamento_idequipamento             dataultimatransmissao        
 ----------------        ----------------------------               ---------------------------------- 
 5                                         1                                              12/05/2011 10:34:55          
 6                                         1                                              12/05/2011 10:34:55          
 1                                         1                                              10/05/2011 10:34:55            
 2                                         1                                              09/05/2011 10:34:55           
 3                                         1                                              09/05/2010 10:34:55            
 4                                         1                                              09/05/2010 10:34:55           
 7                                         1                                              12/05/2009 10:34:55

Como podemos observar o primeiro registro tem o idtransmissao = 5

quando eu executo seguinte comando

SELECT idtransmissao, dataultimatransmissao, equipamento_idequipamento  FROM transmissao group by equipamento_idequipamento  order by dataultimatransmissao desc

Ele esta retornando a seguinte consulta

idtransmissao     dataultimatransmissao     equipamento_idequipamento    
 ----------------  ------------------------  ---------------------------- 
 1                 10/05/2011 10:34:55       1

Ele esta trazendo o o registro de id numero 1, sendo que no caso ele deveria trazer o registro de id numero 5.

Agora eu fiquei sem entender esse comportamento do banco.
Deve ser alguma pernada que estou fazendo.

D

Tente dar groupBy pela data também no criteria e no sql.

vcsmetallica

Mesmo colocando a data no group by esta retornando a menor data.

Vou ter que fazer um ajuste tecnico nisso.

Assim que eu fizer o ajuste tecnico e der certo eu fecho esse topico.

valeu pela força

D

Todos os campos devem estar no groupBy, o id também caso você esteja trazendo.

Criado 11 de maio de 2011
Ultima resposta 12 de mai. de 2011
Respostas 8
Participantes 2