12

我正在阅读 Hibernate HQL 教程,发现 HQL 不支持INSERT INTO..VALUES..INSERT INTO..SELECT..即 HQL 仅支持从另一个表插入。

假设我想在一个表中插入相同的值,并且该数据不是来自任何其他表,即这些值不在任何其他表中。那么我该如何在 HQL 中做到这一点?

另外,想知道 HQL 中这种限制背后的原因吗?

4

3 回答 3

7

如果数据来自另一个表,则不需要使用 hql 插入。

只需获取对您的实体的引用,获取 Hibernate 会话,然后调用 save()。

根据http://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch04.html#d0e2116

INSERT 语句的伪语法

插入到实体名称 properties_list select_statement

仅支持 INSERT INTO ... SELECT ... 表单。您不能指定要插入的显式值。

于 2012-10-05T11:21:19.117 回答
3

Hibernate 是一个 ORM 框架(对象-关系映射)。

它的工作是你给它对象(实体),他管理存储(通过Session.save(),IIRC)。

因此,您不使用 HQL 插入新记录,而是使用 ORM 方法。

并且(这是一个猜测)另一方面,由于从表中加载实体、将它们复制到其他实体并一个一个地存储它们很慢,HQL 提供了一个到数据库中的 SQL 的快捷方式,仅用于该特定操作以提高性能目的。

于 2012-10-05T11:20:39.357 回答
1

您可以使用session.save(object)将数据插入表中。

于 2013-03-22T04:55:32.347 回答