Recuperar último registro de uma chave composta usando criteria

6 respostas
douglascst90

Bom dia galera, tenho uma tabela no banco que sua chave primaria é composta, pelo campo "CODIGO", "ANO" e "MES". Eu precisava fazer uma criteria que me retorna o ultimo registro de cada chave composta por exemplo.

CODIGO | ANO | MES
-----------------------------
19 | 2011 | 10
19 | 2011 | 11
20 | 2011 | 10
20 | 2011 | 11

Eu preciso que minha criteria me retorne os ultimos registro de cada código, no caso esse resultado:

CODIGO | ANO | MES
-----------------------------
19 | 2011 | 11
20 | 2011 | 11

Alguem poderia me ajudar com isso? Desde já obrigado.

Aqui está minha criteria, ela me retorna TUDO do banco conforme a ordem na criteria.

try {

            Transaction transaction = session.beginTransaction();
            Criteria criteria = session.createCriteria(Leitura.class);
            criteria.addOrder(Order.desc("ano"));
            criteria.addOrder(Order.desc("mes"));
            criteria.addOrder(Order.asc("codigo"));
                       
            listaLeituras = (ArrayList<Leitura>) criteria.list();
            transaction.commit();

        }

6 Respostas

D

cara da uma olhada nisso ve se ajuda…

http://www.wbotelhos.com.br/2012/01/17/hibernate-relacionamento-manytomany-com-atributos-e-chave-composta/

abç!!

balrog

esta retornando TUDO porque vc esta mandando retornar TUDO, cade as Restrictions? a unica coisa que vc esta fazendo eh ordernar os registros … alem do mais, nesse caso nao seria simplesmente escrever uma named query que retorne o que vc quer? pra que ficar complicando as coisas que sao simples?

douglascst90

esta retornando TUDO porque vc esta mandando retornar TUDO, cade as Restrictions? a unica coisa que vc esta fazendo eh ordernar os registros … alem do mais, nesse caso nao seria simplesmente escrever uma named query que retorne o que vc quer? pra que ficar complicando as coisas que sao simples?

Sim eu fiz isso para que ela me retorne tudo mesmo, era nas Restrictions que estou tendo problema, queria saber a melhor forma de fazer isso. Obrigado :slight_smile:

balrog

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html

douglascst90

Galera voltando aqui, fiz uma criteria que ela busca conforme um atributo de um objeto. So que não sei como faz pra pegar todos os valores desse atributo, da maneira q eu fiz, esta nao dinamica. Segue abaixo:

transaction = session.beginTransaction();
            Criteria criteria = session.createCriteria(Leitura.class);
            
            //criteria.setFirstResult(0);
            criteria.add(Restrictions.eq("hidro_codigo", 1));
            criteria.addOrder(Order.desc("ano")); 
            criteria.addOrder(Order.desc("mes"));
            
            //criteria.setMaxResults(1); 
            //criteria.uniqueResult();

            listaLeituras = (ArrayList<Leitura>) criteria.list();
            transaction.commit();

Mas na Restrictions ta um valor que eu determinei, ou seja ela me retorna somente o qndo hidro_codigo for = 1. Eu precisava que ele me retornasse todos os codigos do hidro_codigo. Alguem sabe como eu posso fazer isso pessoal, obrigado.

douglascst90

ninguem pra ajudar pessoal?

Criado 15 de maio de 2012
Ultima resposta 16 de mai. de 2012
Respostas 6
Participantes 3