Consulta com Hibernate

Olá Pessoa, tudo bem?

Estou tentando fazer uma consulta com o hibernate mas nao estou tendo sucesso.

A consulta em SQL seria a seguinte:

select * 
from  cliente
        join pessoa on (cliente.codigo = pessoa.clientecodigo)
        left join endereco on (pessoa.enderecocodigo = endereco.codigo)

Consegui juntar cliente com pessoa, porem o endereço nao foi!
Segue oq estou fazendo:

 Criteria criteria = dao.getSession().createCriteria(Cliente.class);
 criteria.createAlias("pessoa", "p");

 criteria.add(Restrictions.ilike("p.nome", filtro.getNome() + "%"));

Se eu adiciono mais um criteria.createAlias(“endere”, “e”); por exemplo, ele tenta fazendo join com a tabela Cliente, mas na realidade preciso fazer com a Pessoa.

Se alguem puder me ajudar!

Obrigado.

Júlio

[quote=jlunge]Olá Pessoa, tudo bem?

Estou tentando fazer uma consulta com o hibernate mas nao estou tendo sucesso.

A consulta em SQL seria a seguinte:

select * 
from  cliente
        join pessoa on (cliente.codigo = pessoa.clientecodigo)
        left join endereco on (pessoa.enderecocodigo = endereco.codigo)

Consegui juntar cliente com pessoa, porem o endereço nao foi!
Segue oq estou fazendo:

 Criteria criteria = dao.getSession().createCriteria(Cliente.class);
 criteria.createAlias("pessoa", "p");

 criteria.add(Restrictions.ilike("p.nome", filtro.getNome() + "%"));

Se eu adiciono mais um criteria.createAlias(“endere”, “e”); por exemplo, ele tenta fazendo join com a tabela Cliente, mas na realidade preciso fazer com a Pessoa.

Se alguem puder me ajudar!

Obrigado.

Júlio[/quote]

Uma das alternativas é você criar um criteria para cliente, atribuir para uma variavel, fazer o join do criteria com pessoa e depois o join com o endereço, entendeu??

Seria algo parecido com isso

[code]Criteria c1 = dao.getSession().createCriteria(Cliente.class);
c1.createAlias(“pessoa”, “p”);

Criteria c2 = dao.getSession().createCriteria(Cliente.class);
c2.createAlias(“endereco”, “e”);[/code]

Edit: não sei se entendi direito o seu problema, mas quando você precisa ir da mesma tabela para joins diferentes uma das alternativas é fazer isso que falei acima

 Criteria criteria = dao.getSession().createCriteria(Cliente.class);
 criteria.createAlias("pessoa", "p");
criteria.createAlias("p.endereco", "e");

 criteria.add(Restrictions.ilike("p.nome", filtro.getNome() + "%"));
 criteria.add(Restrictions.ilike("e", filtro.getNome() + "%"));

Mark_Ameba,

Muito obrigado, fechou! Era bem isso que eu estava me batendo!

Eu tinha tentado, porem nao coloquei o “p.endereco” e sim, somente “endereco”.

Valeu cara, obrigado!

Abraço.