2011-07-28 203 views
0

我想从2个不同的表中检索一些数据。他们被命名为'A'和'B'。 还有另一个名为'C'的表。NHibernate的HQL查询与左外连接

A和B有 'C' 的引用,但 'C' 没有既不A和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中检索数据。当然,我会得到从BX

我试着使用LINQ DefaultIfEmpty()一个空值,但因为我在一个实体使用session.Query(),DefaultIfEmpty尚未在NH 3

如何实现的我可以在HQL中写入吗?

+1

使用HQL时,您查询类而不是表。这是使用ORM的原因之一。那么你的班级模特怎么看? –

回答

1

您不能在HQL中使用左连接作为未映射关系。

您可以为此使用SQLQuery。