NHibernate HQL:带“的左外连接;加上;条款不起作用

NHibernate HQL:带“的左外连接;加上;条款不起作用,nhibernate,hql,sql-order-by,left-join,Nhibernate,Hql,Sql Order By,Left Join,在EAV系统中,我有一个如下所示的映射: <class name="Record"> <map name="Values" table="RecordFieldValue"> <key column="RecordFK"> <index column="FieldFK"> <element column="Value"> </map> </class> selec

在EAV系统中,我有一个如下所示的映射:

<class name="Record">
   <map name="Values" table="RecordFieldValue">
      <key column="RecordFK">
      <index column="FieldFK">
      <element column="Value">
   </map>
</class>
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中修改左join的“on”子句的正确方法是使用“with”关键字(请参阅)。所以我尝试了这个HQL:

from Record rec
left join rec.Values vals with index(vals) = :field
order by vals
不幸的是,这会产生以下错误:with子句表达式没有引用with子句所关联的子句元素。所以我尝试了这个:

from Record rec
left join rec.Values vals with index(rec.Values) = :field
order by vals
但这产生了一个新的错误:with子句只能引用驱动表中的列

有没有关于如何完成这项工作的想法?谢谢

--布莱恩

这项工作:

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

虽然不完全是直观的,也没有很好的文档记录,但它完成了任务。

很漂亮。我希望这个JPA左连接限制查询更为人所知!我浪费了很多时间。