Bom dia pessoal, tenho 3 tabelas, ‘XXX’, ‘A’ e ‘B’.
A tabela XXX possui um relacionamento com ‘A’ e com ‘B’, e ‘B’ possui um relacionamento com ‘A’ ex:
Tabela: XXX
cd_xxx
cd_b
cd_a
Tabela: B
cd_b
cd_a
Tabela: A
cd_a
pp
Queria retornar todos XXX que tivessem alguma relacionamento com A onde a propriedade de A (pp) fosse igual a alguma coisa, mas esse relacionamento pode ser direto através do relacionamento XXX com A OU através do relacionamento com B e depois A, mas isso tudo num mesmo Criteria. Tem como fazer isso?
Tentei algo simples assim:
Criteria criteria = session.createCriteria(XXX.class);
criteria.createCriteria("A").add(Restrictions.eq("pp", 1));
criteria.createCriteria("B").createCriteria("A").add(Restrictions.eq("pp", 1000));
Que me gera um sql mais ou menos assim
select * from XXX
left outer join a a1 on a1.cd_a=XXX.cd_a
left outer join b b1 on b1.cd_b=XXX.cd_b
left outer join a a2 on a2.cd_a=b1.cd_a
where (a1.pp = 1000 and a2.pp = 1000)
Então tem um problema que se XXX tem relacionamento direto com A e não tiver relacionamento com B (cd_b de XXX = null) ele não me retorna, e eu queria que retornasse, um sql assim ja me ajudaria:
select * from XXX
left outer join a a1 on a1.cd_a=XXX.cd_a
left outer join b b1 on b1.cd_b=XXX.cd_b
left outer join a a2 on a2.cd_a=b1.cd_a
where (a1.pp = 1000 or a2.pp = 1000)
alguem sabe se tem como fazer isso e pode me dar um help?!
valeu!