maior_abandonado:
RafaelViana:
Boa Noite,
Estou enfrentando um problema com o Hibernate, ele não está listando os registros com propriedades nulas.
Por exemplo:
Usando a query abaixo irá retornar todos os orçamentos
No entanto, se eu quero filtrar um campo específico, de algum relacionamento da tabela, como segue abaixo:
Os orçamentos que não tem cliente vinculado não serão exibidos. Tentei utilizar LEFT JOIN para trazer todos, independente se estão nulos. Mas, não resolveu.
Como posso fazer isso?
se você não especificar o left outer join não virão orçamentos que não tem um cliente vinculado (não faço ideia de como isso poderia acontecer mas não vou entrar nessa parte :shock: )
inclusive no caso do exeplo que você colocou não está aplicando filtro nenhum, está selecionando o nome do cliente e não filtrando ele inclusive se for para filtrar o nome do cliente, não tem sentido mesmo virem orçamentos que não tem cliente, você não poderia filtrar, o cliente não existe…mas pra isso não precisa do join. Bom eu não sei se ficou claroo que você quer… alguns exemplos
//retorna orçamentos sem cliente ou com nome especifico de cliente
select o from orcamento o where o.cliente is null or o.cliente.nome = :nomeCliente
//idem com ocliente preenchido mesmo que seja lazy
select o from orcamento o left outer join fetch o.cliente c where o.cliente is null or o.cliente.nome = :nomeCliente
//retorna os clientes que tenham orçamento
select c from cliente c where c.orcamentos is not null
Especifiquei o LEFT OUTER JOIN na query e mesmo assim não listou os orçamentos com clientes nulos. O cliente nulo no orçamento é só um exemplo (sim, isso seria um absurdo)
Por exemplo, para fazer a listagem de todos os orçamentos em vez de pesquisar o objeto inteiro com “from Orcamento”, eu faço uma busca apenas por campo específicos para otimizar a busca, já que somente esses campos serão necessários mostrar. Ex: “SELECT cliente.nome, condicaoPagamento.nome FROM Orcamento”.
Isso irá buscar somente esses dois campos que somente esses serão mostrados na listagem. Após selecionar o item na lista ele carrega todo o objeto para mostrar todos os dados, porém na lista somente será buscado o ncessário. Nesse caso acima, se tivesse um orçamento que não foi especificada a condição de pagamento ela não apareceria na listagem.