Hibernate Busca Criteria

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!

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

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

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 …

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

Vlww thiago , consegui resolver!