【问题标题】:NHibernate HQL Query with left outer join带有左外连接的 NHibernate HQL 查询
【发布时间】:2011-07-28 19:13:30
【问题描述】:

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

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 检索数据。我当然会从 b.x 得到一个空值

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

如何在 HQL 中编写?

【问题讨论】:

  • 使用 HQL 时,您查询的是类,而不是表。这就是使用 ORM 的原因之一。那么你的类模型看起来如何?
  • 这可能是相关的:stackoverflow.com/a/52728648/625332

标签: nhibernate join hql outer-join


【解决方案1】:

您不能在 HQL 中将左联接用于未映射的关系。

您可以为此使用 SQLQuery。

【讨论】:

    猜你喜欢
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多