Hibernate Criteria utilizando alias

3 respostas
C

Eu aqui novamente… rsrs

Queria uma mãozinha da galera aí…

Tenho 3 tabelas: Pessoa, Cadastro e Itens de Cadastro.

Pessoa e Itens de Cadastro são tabelas pai da tabela cadastro, ou seja, eu terei objetos de Pessoa e Itens no meu bean Cadastro.

Acontece que eu quero fazer uma busca mais ou menos assim:

public List<Contrato> getContrato(Pessoa pessoa){ //mando a pessoa "x" como parâmetro na busca
        Session session = null;
        try{
            session = getSessionFactory().openSession();
            Criteria criteria = session.createCriteria(Contrato.class); //percorrendo a classe Contrato
            criteria.add(Restrictions.eq("pessoa", pessoa)); //aqui eu quero somente os dados do meu contrato pertencente à pessoa "x"
            criteria.createAlias("itens", "itens"); //itens é um objeto da classe Itens que eu quero fazer a busca
            
            // E agora? Eu quero que a consulta filtre primeiro somente os dados da minha pessoa "x", 
            // para depois buscar os itens da tabela Itens que pertençam apenas ao cadastro da pessoa "x", porque senão ele me retornaria
            // todos os itens cadastrados

            return criteria.list();

        }catch(Exception ex){}
        
        finally{
            if(session != null && session.isOpen())
                session.close();
        }
        return null;
}

Alguma luz? Obrigado… :smiley:

3 Respostas

C

up

C

ninguém pra me ajudar? preciso de uma ajuda urgente, pessoal :shock:

C

Consegui a solução… vou postar aqui para o pessoal que tiver dúvidas a respeito…

(Somente o bloco try)

try{
            session = getSessionFactory().openSession();
            Criteria criteria = session.createCriteria(Contrato.class);
            criteria.add(Restrictions.eq("pessoa", pessoa)); // 1
            Contrato contrato = (Contrato) criteria.uniqueResult(); //2
            criteria.createAlias("itens", "itens");  //3
            criteria.add(Restrictions.eq("itens", contrato.getItens())); //4

            return criteria.list();
}

1- O que eu fiz foi simples. Primeiro fiz uma busca apenas dos dados da pessoa “x” presente no contrato destinado a ela.

2- Como encontrei apenas dados de uma pessoa, guradei-os em um objeto contrato pelo criteria.uniqueResult();

3- Criei um alias (espécie de string de manipulação) para buscar os resultados na tabela Itens;

4- E finalmente, com base no meu alias, fiz uma busca dos itens do meu objeto contrato (que tem dados apenas de 1 pessoa) e peguei todos os itens disponíveis.

Fica aí a resolução para quem quiser utilizar… falow… :smiley:

Criado 16 de maio de 2010
Ultima resposta 17 de mai. de 2010
Respostas 3
Participantes 1