我正在阅读 Hibernate HQL 教程,发现 HQL 不支持INSERT INTO..VALUES..
但INSERT INTO..SELECT..
即 HQL 仅支持从另一个表插入。
假设我想在一个表中插入相同的值,并且该数据不是来自任何其他表,即这些值不在任何其他表中。那么我该如何在 HQL 中做到这一点?
另外,想知道 HQL 中这种限制背后的原因吗?
如果数据来自另一个表,则不需要使用 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 ... 表单。您不能指定要插入的显式值。
Hibernate 是一个 ORM 框架(对象-关系映射)。
它的工作是你给它对象(实体),他管理存储(通过Session.save()
,IIRC)。
因此,您不使用 HQL 插入新记录,而是使用 ORM 方法。
并且(这是一个猜测)另一方面,由于从表中加载实体、将它们复制到其他实体并一个一个地存储它们很慢,HQL 提供了一个到数据库中的 SQL 的快捷方式,仅用于该特定操作以提高性能目的。
您可以使用session.save(object)
将数据插入表中。