Соединение NHibernate HQL не возвращает все необходимые строки
-
06-07-2019 - |
Вопрос
Я изменяю существующий запрос HQL, который возвращает отдельные столбцы, а не граф объектов, но теперь я не получаю все необходимые строки.
Вот несколько фактов о текущей схеме:
- Смета принадлежит контракту.
- Свойство OwningDepartment контракта может иметь значение null.
- Свойство ParentBusinessStream отдела не может иметь значение null.
Это запрос:
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
К сожалению, мой запрос не возвращает оценки, если у родительского контракта нет отдела-владельца.Вместо этого я хочу, чтобы соответствующие поля были просто нулевыми.Я попробовал левое внешнее соединение, но получил те же результаты.
Любая помощь будет очень высоко ценится.Извиняюсь, если я сделал что-то глупое.
Ваше здоровье,
Джеймс
Решение 2
Я думаю, что у меня получилось:d.ParentBusinessStream.Title — это неявное внутреннее соединение, но, поскольку d может иметь значение null, оно работает неправильно.Я изменил свой запрос, чтобы принять это во внимание
Другие советы
Я обнаружил, что необычные запросы, содержащие левые внешние соединения, лучше использовать с помощью ISQLQuery, который дает вам доступ к правильному синтаксису SQL, а также к некоторым возможностям HQL.
Кроме того, вы не предоставляете файлы сопоставления, которые обычно полезны.