NHibernate HQL Adira não retornar linhas todos necessários
-
06-07-2019 - |
Pergunta
Eu estou modificando uma consulta HQL existente que retorna colunas individuais em vez de um gráfico de objeto, mas agora eu não estou recebendo todas as linhas que eu preciso.
Aqui alguns fatos sobre o esquema atual:
- Uma estimativa pertence a um contrato.
- A propriedade OwningDepartment de um contrato pode ser nulo.
- A propriedade ParentBusinessStream de um departamento não pode ser nulo
Esta é a consulta:
select e.ID, e.StatusCode.ID, e.InputDate, e.ParentClient.Name, e.ParentContractLocation.ParentLocation.Description, e.Description, e.InternalRef, e.ExternalRef, e.TotalIncTax, e.TaxTotal, e.Closed, e.ViewedByClient, e.HelpdeskRef, e.ParentContract.Reference, d.ParentBusinessStream.Title, d.Name
from Estimate e, Department d where (e.ParentContract.ID in (select cs.ParentContract.ID from ContractStaff cs
where cs.ParentStaff.ID=:staffID)) and ((d.ID = e.ParentContract.OwningDepartment.ID) OR (d.ID is null)) order by e.ID
Infelizmente a minha consulta é não retornando Estimativas quando o contrato pai não tem um departamento de possuir. Em vez disso eu quero os campos relevantes para apenas ser nulo. Eu tentei uma junção externa esquerda, mas tem os mesmos resultados.
Qualquer ajuda seria muito apreciado. Desculpas se eu fiz algo estúpido.
Cheers,
James
Solução 2
Eu acho que eu tenho trabalhado para fora: d.ParentBusinessStream.Title é uma junção interna implícita mas desde que d pode ser nulo não funciona corretamente. Eu mudei minha consulta para levar isso em conta ??p>
Outras dicas
Descobri que consultas incomuns contendo externa esquerda junta é melhor fora usando um ISQLQuery que lhe dá acesso à sintaxe SQL adequada, bem como algum poder HQL.
Além disso, você não fornecer arquivos de mapeamento que geralmente são úteis