NHibernate HQL non restituisce tutte le righe richieste
-
06-07-2019 - |
Domanda
Sto modificando una query HQL esistente che restituisce singole colonne anziché un grafico a oggetti, ma ora non riesco a ottenere tutte le righe di cui ho bisogno.
Ecco alcuni fatti sullo schema attuale:
- Un preventivo appartiene a un contratto.
- La proprietà OwningDepartment di un contratto può essere nulla.
- La proprietà ParentBusinessStream di un dipartimento non può essere nulla
Questa è la query:
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
Sfortunatamente la mia query non sta restituendo stime in cui il contratto principale non ha un reparto proprietario. Voglio invece che i campi pertinenti siano nulli. Ho provato un join esterno sinistro ma ho ottenuto gli stessi risultati.
Qualsiasi aiuto sarebbe molto apprezzato. Mi scuso se ho fatto qualcosa di stupido.
Saluti,
James
Soluzione 2
Penso di averlo capito: d.ParentBusinessStream.Title è un join interno implicito ma poiché d può essere nullo non funziona correttamente. Ho modificato la mia richiesta per tenerne conto
Altri suggerimenti
Ho scoperto che le query insolite contenenti i join esterni a sinistra sono migliori usando un ISQLQuery che ti dà accesso alla sintassi SQL corretta e ad un po 'di potenza HQL.
Oltre a ciò, non fornisci file di mappatura che di solito sono utili