Соединение NHibernate HQL не возвращает все необходимые строки

StackOverflow https://stackoverflow.com/questions/1612300

  •  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.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top