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