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