为什么在HQL中不允许插入显式值?

时间:2018-02-07 03:24:29

标签: java hibernate hql

正如Hibernate ORM 5.2.13.Final User Guide中提到的那样:

  

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

官方消息来源推断其背后的推理吗?是否存在任何干扰HQL中INSERT INTO ... VALUES ...形式支持的限制?

1 个答案:

答案 0 :(得分:2)

引入DML样式操作的主要原因是能够以牺牲一个(或者在某些情况下涉及实体层次结构的情况下)真实SQL语句为代价来处理数据库中的多个记录。这样我们就可以避免在内存中获取所有受影响的数据,以便在单个实体(行)上使用CRUD操作执行等效逻辑。

基本上,这允许我们在需要的情况下使用来自SQL世界的熟悉的UPDATEDELETE语句,同时仍然利用HQL / JPQL的所有好处。

insert ... select也可以达到这个目的,而insert ... values与简单地持久化实体实例相比没有任何好处。