Hibernate Busca Criteria

5 respostas
RicardoYukito

Preciso fazer uma consulta envolvendo 4 classes, FISICA E JURICA que herdam de PESSOA, e CLIENTE que possiu um relacionamento ManyToOne com PESSOA.

quando faço a consulta, eu passo o tipo e a identidade que eu quero que me mostre na tabela

TIPO: … IDENTIDADE:
(x)0-todos…(x)0-TODOS
( )1-CLIENTE … ( )1- FISICA
( )2-NAO CLIENTE … ( )2-JURIDICA

pensei em fazer dessa forma

public List<Pessoa> ListarPessoa(String consulta, int tipo, int identidade) throws Exception {
        try {
            session = HibernateUtil.getSessionFactory().openSession();
            session.beginTransaction();
            Criteria p = session.createCriteria(Pessoa.class);
            switch (identidade) {
                case 0: // TODAS AS PESSOAS
                        p.list();   
                    break;
                case 1: //pessoas fisicas
                    p.add(?? me traga somente PessoasFisicas);
                    break;
                
                case 2: //pessoas juridicas
                    p.add(?? me traga somente PessoasJuridicas);
                   break;
            }

            switch (tipo){
                 
                case 1:// APENAS CLIENTES
                  p.add(??   somente os que tbm sao clientes (Cliente.class);)
                        break;
                     case 2:// PESSOA que ainda nao são clientes
                  p.add (??   todos que nao sao clientes!!)
                      break;
                   }
          
            p.add(Restrictions.like("nomeRazao", consulta + "%"));
            setPessoas(??A lista que me restou??);
         
        }
        catch(Exception e) {
            e.printStackTrace();
        }finally {
            session.close();
        }
       return pessoas;
    }

    public void setPessoas(List<Pessoa> pessoas) {
        this.pessoas = pessoas;

qualquer ajuda no Codigo, na Logica, ou com algum tutorial(em portugues^^) agradeço!

5 Respostas

doug

Olá

Então preciso ver como está estruturado sua classe Pessoa.

Mas caso esteja assim Pessoa (atributos: TipoPessoa tipoPessoa, String razaoSocial) seu criteria ficaria mais ou menos assim:

Criteria p = session.createCriteria(Pessoa.class, "p");  
            switch (identidade) {  
                 case 0: // TODAS AS PESSOAS  
                         p.list();     
                     break;  
                 case 1: //pessoas fisicas
                     criteria.createAlias("p.tipoPessoa", "tp");
                     criteria.add(Restrictions.eq("tp.pkTipoPessoa", 1 &lt;codigo vido de um parametro&gt;));  
                     p.add(?? me traga somente PessoasFisicas);  
                     break;  
                   
                 case 2: //pessoas juridicas 
                     criteria.createAlias("p.tipoPessoa", "tp");
                     criteria.add(Restrictions.eq("tp.pkTipoPessoa", 2&lt;codigo vido de um parametro&gt;));   
                     p.add(?? me traga somente PessoasJuridicas);  
                    break;  
             }  
   //... assim continua

Sempre quando for refereciar uma chave secundária use crealeAlias, ok!?

Espero ter ajudado
Flwsss

doug

Esqueci de falar tem um How To legal da própria Jboss falando sobre hibernate: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html

RicardoYukito

muito obrigado pela documentação vou dar uma olhada aqui e ver até onde consigo progredir… rs

na verdade minha tabela pessoa nao tem nenhum atributo que especifica o tipo,… pensando na sql eu precisaria gerar seria um “where PESSOA.pessoa_id = JURIDICA.juridica_id” o que nao sei se é suportado utilizando criteria…
criar um campo “tipo” daria certo, mas como ultima opção …

to achando que essa logica que eu criei nao vai dar certo …

doug

Provavelmente não consiga.
Cria um campo tipo de pessoa, pode ser inteiro mesmo ou um boolean só para identificar a Pessoa na base.

Detalhe caso seja um inteiro fica mais fácil fazer o criteria, dai não precisa usar alias, você continua o que estava antes e faz um addRestriction.

Espero ter ajudado

RicardoYukito

Vlww thiago , consegui resolver!

Criado 20 de julho de 2010
Ultima resposta 20 de jul. de 2010
Respostas 5
Participantes 2