Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么HQL中不允许插入显式值?_Java_Hibernate_Hql - Fatal编程技术网

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

Java 为什么HQL中不允许插入显式值?,java,hibernate,hql,Java,Hibernate,Hql,正如在以下文件中提到的: 只有插入到…​ 选择…​ 支持表单。不能指定要插入的显式值 官方消息来源是否详细阐述了其背后的原因?是否有任何特定限制会干扰对插入到…中的的支持。。。值…HQL中的表单?引入DML风格操作的主要原因是能够处理数据库中的多条记录,而代价是一条(或在某些情况下仅涉及实体层次结构的几条)真实SQL语句。通过这种方式,我们可以避免获取内存中所有受影响的数据,从而在单个实体(行)上使用CRUD操作执行等效逻辑 基本上,这允许我们在需要时使用熟悉的SQL世界中的UPDATE和DEL

正如在以下文件中提到的:

只有
插入到…​ 选择…
​ 支持表单。不能指定要插入的显式值


官方消息来源是否详细阐述了其背后的原因?是否有任何特定限制会干扰对插入到…中的
的支持。。。值…
HQL中的表单?

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

基本上,这允许我们在需要时使用熟悉的SQL世界中的
UPDATE
DELETE
语句,同时仍然利用HQL/JPQL的所有优点


插入。。。选择
也可用于此目的,而插入。。。与简单地持久化实体实例相比,值不会带来任何好处。

尽管这个问题可能有点推测性,但我猜其背后的原因可能是HQL将db抽象到Bean对象中,因此更倾向于要求通过子查询将值传递给insert(因为插入部分希望它们与您的hibernate模式的定义相匹配)请参阅并感谢@LyjuIEdwinson!引用的问题非常相关,不幸的是,它们没有详细说明主题。官方源代码(HQL-SQL ANTLR4语法)中也有类似的问题-事实上,这是最初的任务-。虽然没有太多信息。例如,可能有一个好处,可以编写一个通用的数据迁移脚本,这在HQL中对于某些情况来说相对容易。也许,插入值工具有多个有趣的用例,并不与Hiberna的理念相矛盾te framework.@PavelRyzhov当然,就像在任何框架中一样,在某些情况下,缺少的功能可能会派上用场。我刚刚注意到,提供的DML风格的操作集在使用单个命令在数据库中执行批量操作的能力方面是一致的。