NHibernate HQL Join не возвращает все необходимые строки - PullRequest
2 голосов
/ 23 октября 2009

Я изменяю существующий HQL-запрос, который возвращает отдельные столбцы, а не граф объектов, но теперь я не получаю все нужные мне строки.

Вот несколько фактов о текущей схеме:

  • Оценка принадлежит Контракту.
  • Свойство Контракта OwningDepartment может быть нулевым.
  • Свойство ParentBusinessStream Департамента не может быть пустым

Это запрос:

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

К сожалению, мой запрос не возвращает оценки, если в родительском контракте нет собственного отдела. Вместо этого я хочу, чтобы соответствующие поля были просто нулевыми. Я попробовал левое внешнее соединение, но получил те же результаты.

Любая помощь будет принята с благодарностью. Извиняюсь, что сделал что-то глупое.

* +1019 * Приветствия

Джеймс

Ответы [ 2 ]

0 голосов
/ 02 ноября 2009

Я думаю, что сработал: d.ParentBusinessStream.Title - это неявное внутреннее соединение, но, поскольку d может быть нулевым, оно не работает правильно. Я изменил свой запрос, чтобы учесть это

0 голосов
/ 24 октября 2009

Я обнаружил, что необычные запросы, содержащие левые внешние объединения, лучше использовать с помощью ISQLQuery, который дает вам доступ к правильному синтаксису SQL, а также к некоторой мощности HQL.

Кроме того, вы не предоставляете файлы сопоставления, которые обычно полезны

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...