В системе EAV, у меня есть отображение, которое выглядит следующим образом:NHibernate HQL: левое внешнее соединение с «с» пункт не работает
<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
После много копания, я обнаружил, что правильный способ изменить «на» пункта левого присоединиться к HQL это с «с» ключевое слово (см. https://nhibernate.jira.com/browse/NH-514). Так что я попробовал этот HQL:
from Record rec
left join rec.Values vals with index(vals) = :field
order by vals
К сожалению, это производит следующее сообщение об ошибке: с-п выражения не ссылаться из-п элемент, к которому с-п ассоциировалось. Так что я попытался вместо этого:
from Record rec
left join rec.Values vals with index(rec.Values) = :field
order by vals
Но произвел новую ошибку: с пунктом может ссылаться только на столбцы в таблице вождения.
Любые идеи о том, как получить эту работу? Благодарю.
- Брайан
Можно ли это сделать с Критериями? – 2013-08-08 19:24:35