NHibernate HQL: left outer join with "with" clause does not work

В системе EAV у меня есть отображение, которое выглядит следующим образом:

<class name="Record">
   <map name="Values" table="RecordFieldValue">
      <key column="RecordFK">
      <index column="FieldFK">
      <element column="Value">
   </map>
</class>

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

Желаемый SQL выглядел бы так:

select rec.*, val.Value
from Record rec
left outer join RecordFieldValue val
on val.RecordFK = rec.PK and val.FieldFK = :field
order by val.Value

После долгих поисков я обнаружил, что правильным способом модификации предложения "on" левого объединения в HQL является использование ключевого слова "with" (см. https://nhibernate.jira.com/browse/NH-514). Поэтому я попробовал такой HQL:

from Record rec
left join rec.Values vals with index(vals) = :field
order by vals

К сожалению, это приводит к следующей ошибке: выражение with-clause не ссылается на элемент from-clause, с которым связано выражение with-clause. Поэтому вместо этого я попробовал следующее:

from Record rec
left join rec.Values vals with index(rec.Values) = :field
order by vals

Но это привело к новой ошибке: выражение with может ссылаться только на столбцы в ведущей таблице.

Есть идеи, как заставить это работать? Спасибо.

-- Брайан

7
задан Daniel Schilling 24 October 2013 в 17:30
поделиться