【问题标题】:Inserting data in one table using HQL in Hibernate在 Hibernate 中使用 HQL 在一张表中插入数据
【发布时间】:2025-12-29 05:35:10
【问题描述】:

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

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

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

【问题讨论】:

  • 不明白谁否决了这个问题?谁做过,请告诉我原因,以便我以后注意
  • 我不是反对者,但我认为您应该阅读以下内容:*.com/faq#dontask

标签: java hibernate hql


【解决方案1】:

如果数据来自另一个表,则不需要使用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 ... 形式。您不能指定要插入的显式值。

【讨论】:

  • 我在问如何在 HQL 的表中插入数据。注意:要插入的数据不是来自另一个表。
  • 我为插入添加了休眠文档。
【解决方案2】:

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

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

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

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

【讨论】:

  • 我知道使用 session.save() 我可以做同样的事情,但我只想知道如何使用 HQL 将数据(不是来自任何其他表)插入到表中。
  • 框架的提供者说你不能这样做。你知道一个替代方案,并给出了它的理由。然而你只是说你想那样做......至少,我们很幸运你是一名程序员而不是飞行员。如果您只想使用 SQL,请使用 SQL 而不是 Hibernate。
  • 我从来没有说过我想那样做,我只是在问我们是否可以这样做..我希望你能理解其中的区别..
  • 文档(和您的帖子)清楚地表明您不能在 HQL 中使用。使用 SQLQuery 或直接 SQL。
【解决方案3】:

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

【讨论】: