В системе 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 может ссылаться только на столбцы в ведущей таблице.
Есть идеи, как заставить это работать? Спасибо.
-- Брайан