具有左外连接的NHibernate HQL查询

时间:2011-07-28 19:13:30

标签: nhibernate join hql outer-join

我想从2个不同的表中检索一些数据。它们被命名为“A”和“B”。 还有另一个名为'C'的表。

A和B都引用'C',但'C'既没有引用也没有引用B.

我的SQL命令是这样的:

select 
    A.x,
    A.y,
    B.z 
from 
    A
LEFT OUTER JOIN C ON C.i = A.i
LEFT OUTER JOIN B ON B.i = C.i

问题是:我在表A中需要一些数据,在表B上有一些数据。 我需要从表A中检索所有数据,其中表A中的属性等于表B的属性,因此表B中的一些数据。 这很简单,非常简单的HQl命令(使用LINQ更容易):

select a.x, a.y, b.z
from A as a, B as b
where a.x = b.x

但问题是:当a.x为NULL时,我还需要从A中检索数据。我当然会从b.x

获得一个空值

我尝试在LINQ上使用DefaultIfEmpty(),但由于我在实体上使用session.Query(),因此在NH 3中尚未实现DefaultIfEmpty。

我如何在HQL中编写它?

1 个答案:

答案 0 :(得分:1)

您不能在HQL中使用左连接来表示未映射的关系。

您可以使用SQLQuery。