具有左外连接的 NHibernate HQL 查询
我想从两个不同的表中检索一些数据。他们被命名为“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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
对于未映射的关系,您不能在 HQL 中使用左联接。
您只需使用 SQLQuery 即可。
You can't use left joins in HQL for unmapped relationships.
You can just use a SQLQuery for this.