Tipos de dados e campos
Como forçar outer join nos casos de 2o nivel obrigatório sobre 1o nível opcional?
ADSRT.FAQ-3966
Existe um BUG no runtime do Telescope que cria um INNER JOIN quando deveria ser OUTER JOIN.
Veja o exemplo:
Digamos que exista uma entidade Pedidos que tem um relacionamento opcional para REPRESENTES. Porém, na entidade Representante tem um relacionamento obrigatório para CIDADES.
Se formos fazer uma consulta em PEDIDOS > REPRESENTANTES > CIDADES, o Telescope irá assumir LEFT OUTER JOIN entre PEDIDOS e REPRESENTANTES mas INNER JOIN entre REPRESENTANTES e CIDADES. Consequentemente, registros de pedidos que não tenham representantes não serão retornados.
Nestes casos, enquanto o Telescope não for corrigido, teremos que forçar o OUTER JOIN do segundo relacionamento da seguinte forma:
Pedidos p = new Pedidos();
Representantes r = p.joinRepresentante();
Cidades c = r.joinCidade();
c.getJoinedBy().setJoinType(Join.LEFT_OUTER_JOIN);
Isso irá trocar o tipo de join da relação feita na entidade Cidades, passando de INNER para LEFT OUTER.