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
将获取所有name
s 的列表,它们是映射到表的Java 对象中的属性。
【讨论】:
以上是关于HQL在哪里明确定义?的主要内容,如果未能解决你的问题,请参考以下文章