HQL在哪里明确定义?

Posted

技术标签:

【中文标题】HQL在哪里明确定义?【英文标题】:Where is HQL clearly defined? 【发布时间】:2013-12-19 18:39:33 【问题描述】:

我的 IDE 使用不同于我熟悉的用于休眠查询的 SQL 语法。我去了 HQL 文档 (http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/queryhql.html),他们没有解释这个查询是如何派生的。这很简单,必须有一个语法定义我正在寻找但我找不到它。有人能解释一下吗?

基本的 HQL 查询如下所示:

SELECT u FROM User u

在 SQL 中我会这样写:

SELECT * FROM User; 

SELECT u.* FROM User AS u;

但是对于这样一个简单的查询,谁需要额外的复杂性。

HQL 在哪里定义的很清楚?

【问题讨论】:

嗯?您链接到定义 HQL 的文档。主要区别在该链接的第一段中指出:额外的复杂性源于它是对象和表之间的映射,即“HQL 完全面向对象并理解继承、多态和关联等概念” Bizmark,我链接的文档没有定义我给出的简单查询示例。 上面 JBOSS 链接的第 14.6 节特别定义了 SELECT 子句,但 使用了通用的 select 子句,并且没有解释使用同义词“u”代替选择整个列列表的星号或在“用户 u”中定义同义词时缺少“as”。或者,我完全误解了 HQL,因为没有好的文档。 “u”可以是对“User.Java”类的引用,该类定义与数据库中的用户表相同的列,反之亦然……如果是这样,我在任何地方都看不到这个映射。 【参考方案1】:

您必须换种方式思考,这就像对 Java 对象运行 SQL 查询,因此它是混合性质的。您不会在 HQL 中编写 SELECT u From User u,您可以简单地编写 from yourPackage.User,这将检索 User 类的所有实例,即。映射到数据库中行的所有对象。

HQL 中的select 子句更多地用于访问类实例中的各个属性,例如select u.name from User u 将获取所有names 的列表,它们是映射到表的Java 对象中的属性。

【讨论】:

以上是关于HQL在哪里明确定义?的主要内容,如果未能解决你的问题,请参考以下文章

不确定为啥会出现 ORA-00918 列定义不明确

“未定义 ctrls”错误不确定在哪里定义它

在这段代码中得到“窗口未定义在第18行”,即使我喜欢99%确定我明确定义它显然有些错误但是idk是什么

猫鼬,我在哪里定义模型[关闭]

在 ( ... ) 查询中编写 HQL 的正确方法

在哪里进行猫鼬连接/任何数据库连接