连接所需的 HQL 路径(连接同一个表时)
Posted
技术标签:
【中文标题】连接所需的 HQL 路径(连接同一个表时)【英文标题】:HQL Path expected for join (when joining same table) 【发布时间】:2011-11-07 13:15:16 【问题描述】:我正在尝试为两个不同的设备获取成对的测量值,并以相同的时间戳加入。在 SQL 中,这按预期工作:
select
leftItem.Timestamp, leftItem.Value, rightItem.Value
from
DataTable leftItem
inner join DataTable rightItem
on leftItem.Timestamp = rightItem.Timestamp
where
leftItem.Device = 1 and rightItem.Device = 2
但如果我尝试将其转换为 HQL:
select
left, right
from
DataTable as left
inner join DataTable as right
on left.Timestamp = right.Timestamp
where
left.Device = 1 and right.Device = 2
我收到了NHibernate.Hql.Ast.ANTLR.SemanticException:
如何指定同一张表的“路径”?
【问题讨论】:
遇到此错误时,您在 HQL 中尝试了什么? @Stefan:实际上是同一个查询。 (好的,我将对其进行编辑以澄清) 【参考方案1】:在 HQL 中,只能对实体之间的关联进行连接。如果你想加入其他东西,唯一的可能是在 where 子句中加入:
select left, right
from
DataTable as left, DataTable as right
where
left.Timestamp = right.Timestamp
and left.Device = 1
and right.Device = 2
【讨论】:
谢谢!在服务器上如何评估它(性能方面)有什么不同吗?还是结果不同?因为毕竟我也可以使用纯 SQL。 开启SQL日志查看生成的SQL,比较两个执行计划。这取决于数据库。以上是关于连接所需的 HQL 路径(连接同一个表时)的主要内容,如果未能解决你的问题,请参考以下文章
org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:FROM,当尝试删除与自身连接的表时