Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
有没有办法在Hibernate中使用单选择查询而不是多选择查询?_Hibernate_Hql - Fatal编程技术网

有没有办法在Hibernate中使用单选择查询而不是多选择查询?

有没有办法在Hibernate中使用单选择查询而不是多选择查询?,hibernate,hql,Hibernate,Hql,我正在使用Spring+HibernateHQL。 我有一个要求,我需要多次激发select查询,因为每次参数都不同。 比如说 从名称=?的MY_表中选择*?年龄=? 输入将是 "John", 30 "Nick", 29 "Joe", 32 等等。。可能有很多 这导致n个查询,其中n是输入的数量 例: 在hibernate中有没有一种方法可以让我只使用一个查询而不是多个select查询 前任: 从MY_表中选择*,其中name=John and age=30或name=Nick and age

我正在使用Spring+HibernateHQL。 我有一个要求,我需要多次激发select查询,因为每次参数都不同。 比如说

从名称=?的MY_表中选择*?年龄=? 输入将是

"John", 30
"Nick", 29
"Joe", 32
等等。。可能有很多

这导致n个查询,其中n是输入的数量

例:

在hibernate中有没有一种方法可以让我只使用一个查询而不是多个select查询 前任: 从MY_表中选择*,其中name=John and age=30或name=Nick and age=29或name=Joe and age=32


或者任何其他优化方式?

您可以使用UNION,但据我所知,HQL中不支持UNION。如果此限制仍然有效,那么您可能必须回过头来使用本机SQL

SELECT * FROM  MY_TABLE  WHERE name=John and age=30
UNION
SELECT * FROM  MY_TABLE  WHERE name=Nick and age=29 
UNION
SELECT * FROM  MY_TABLE  WHERE name=Joe and age=32
如果使用条件查询,则可以使用析取:

SELECT * FROM  MY_TABLE  WHERE name=John and age=30
UNION
SELECT * FROM  MY_TABLE  WHERE name=Nick and age=29 
UNION
SELECT * FROM  MY_TABLE  WHERE name=Joe and age=32
Disjunction d = Restrictions.disjunction(); 
for(param p : params) {
   Conjunction c = Restrictions.conjunction();
   c.add(Restrictions.eq("name", p.getName()));
   c.add(Restrictions.eq("age", p.getAge()));
   d.add(c);    
}
criteria.add(d);