具有左外连接的 NHibernate HQL 查询

发布于 2024-11-26 15:18:47 字数 651 浏览 1 评论 0原文

我想从两个不同的表中检索一些数据。他们被命名为“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

但问题是:当 ax 为 NULL 时,我还需要从 A 检索数据。我当然会从 bx 获得一个 null 值

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

我如何在 HQL 中编写它?

I would like to retrieve some data from 2 different tables. They are named 'A' and 'B'.
There is also another table called 'C'.

Both A and B have a reference to 'C', but 'C' does NOT have a reference neither to A nor B.

My SQL command would be something like this:

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

The thing is: I have some data i need in table A, and some data on table B.
I need to retrieve all data from table A where a property from table A is equal to a property of the table B, and therefore some data from table B.
Thats easy, really simple HQl command (easier with LINQ):

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

But the problem is: i also need to retrieve the data from A when a.x is NULL. I would of course get a null value from b.x

I tried using DefaultIfEmpty() on LINQ, but since i use session.Query() over an entity, DefaultIfEmpty is not implemented yet in NH 3.

How can i write that in HQL?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

若水般的淡然安静女子 2024-12-03 15:18:47

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

您只需使用 SQLQuery 即可。

You can't use left joins in HQL for unmapped relationships.

You can just use a SQLQuery for this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文