连接所需的 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,当尝试删除与自身连接的表时

HQL 错误:连接的预期路径

HQL 错误:连接的预期路径

无法在官方 MySQL 连接器中获得所需的输出

如何连接 2 个表以接收所需的所有数据

在wordpress中安装主题所需的连接信息