在Hibernate中使用HQL在一个表中插入数据

我正在阅读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语句的伪语法

INSERT INTO EntityName properties_list select_statement

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

Hibernate是一个ORM框架(Object-Relational Mapping)。

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

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

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

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