HQL-запрос:
from BusinessObject as businessobject
left outer join businessobject.BussinesPartner as businesspartner
left outer join businessobject.Document as document
left outer join businessobject.Group as group ";
where businessobject.Date >= :datefrom and businessobject.Date <= :dateto
and (:filter = ''
or :filter is null
or businesspartner.Name like '%' || :filter || '%'
or group.Name like '%' || :filter || '%'
or document.Name like '%' || :filter || '%')
Я не хочу использовать HQL.Я также хочу строго типизированную коллекцию результатов без использования неудобного и грязного SetResultTransformer.Я бы предпочел использовать Query <> (), но я не знаю, как форсировать внешние объединения.
Когда я пишу это в форме Query <> (), он не вернет результат, для которогодата находится в правильном диапазоне и filter = "", если, например, BusinessPartner имеет значение null.Хотя логическое выражение «где» является истинным для этих объектов, похоже, что они все равно не находятся в результирующем наборе из-за использования внутренних объединений:
session.Query<BusinessObject>()
.Where(x =>
(x.Date >= criteria.DateFrom && x.Date <= criteria.DateTo
&& (criteria.Filter == ""
|| x.BusinessPartner.Name.Contains(criteria.Filter)
|| x.Group.Name.Contains(criteria.Filter)
|| x.Document.Name.Contains(criteria.Filter))))
Это не работает, потому что любая строкас нулевым значением в поле, ссылающемся на BusinessPartner, Group или Document, возвращаться не будет (с указанием внутреннего соединения).
Можно ли делать то, что я хочу, с помощью Query <> ()?Или с критериями?