Hibernate

Galera seguinte, quero que minha consulta no Hibernate responda todos os PAIS com ou sem filhos e que os filhos estejam em uma determinada situacao para isso faço o count
ja fiz a consulta direto no banco e funciona blz so que ao montar no HIBERNATE ele gera esta query que so me retorna os pais que os filhos tem a determinada situação os demais que deveriam retornar com ZERO não retornam…


select PAI,
       count(Filho.SEQ_FILHO) as qtd
  from Casa ,
       Pai,
       Filho,
       Situacao
 where Pai.SEQ_PAI = Filho.SEQ_FILHO(+)
   and Filho.SITUACAO = Situacao.SEQ_TIPO_SITUACAO
   and Pai.COD_CASA   = Casa.COD_CASA
   and Situacao.TIPO_SITUACAO = 'XXXXXX'
group by PAI

Em primeiro lugar, quando voce diz que quer todos os pais com ou sem filhos isso é o mesmo que: pesquisar todos os pais, independente dos filhos! Eu faria uma HQL da seguinte maneira:

select pai 
from Pai pai, Filho filho, Situacao situacao 
where pai.filho = filho and filho.situacao = situacao

Quando escrevo pai.filho = filho significa que estou comparando dois objetos com o metodo equals, onde eles serao iguais somente se os valor das chaves primarias forem iguais (no caso em que trabalho eu comparo os ids).
O problema de nao retorar os pais com ZERO filhos é que a query que voce estamos fazendo filtra apenas os pais que possuem algum filho, basta ver a amarracao pai.filho = filho.

Uma alternatica é fazer uma query que retorna uma lista de pais e depois usar um loop for-each para iterar essa lista e pegar somente os pais que possuem filhos em determinada situacao!
Ate

Então mas fazendo assim ele conta somente os caras com filhos em uma situacao
que quero que se existir PAI com filho e não esteja nesta situacao informada ele respoderia o contador com ZERO…
isso que vc me disse eu fiz mas ele retorna o que descrevi acima.

Valeu

Bom, nao entendi o que voce disse, mas codificando minha alternativa, teremos:

List<Pai> resultado = session.createQuery("pai from Pai pai").list();
List<Pai> listaDePais = new ArrayList<Pai> ();

for(Pai pai : resultado)
/*
* verificamos primeiro se o pai tem filho (no caso estou supondo apenas um filho), 
* depois verificamos a situacao desse filho
*/
   if(pai.getFilho() != null && (pai.getFilho().getSituacao().equals("uma situacao desejada") || pai.getFilho().getSituacao().equals("outra situacao desejada")))
      listaDePais.add(pai);

Veja que o tamanho da listaDePais é o count que voce deseja!

Ate…e desculpe-me se nao te entendi!