【发布时间】: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”类的引用,该类定义与数据库中的用户表相同的列,反之亦然……如果是这样,我在任何地方都看不到这个映射。