在Hibernate中有任何方法可以使用单个选择查询而不是多个选择查询吗?

时间:2011-08-17 15:00:52

标签: hibernate hql

我正在使用Spring + Hibernate(HQL) 我有一个要求,我需要多次触发选择查询,因为每次参数都不同。
例如

SELECT * FROM MY_TABLE WHERE name=? and age=?
输入将是

"John", 30
"Nick", 29
"Joe", 32

等......可能有任何数量。

这导致n次查询,其中n是输入数

例如:

SELECT * FROM  MY_TABLE  WHERE name=John and age=30
SELECT * FROM  MY_TABLE  WHERE name=Nick and age=29 
SELECT * FROM  MY_TABLE  WHERE name=Joe and age=32

在休眠方式中有一种方法,我只能有一个查询而不是多个选择查询 例如:
SELECT * FROM MY_TABLE WHERE (name=John and age=30) or (name=Nick and age=29) or (name=Joe and age=32)

还是其他任何优化方式?

2 个答案:

答案 0 :(得分:0)

你可以使用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

答案 1 :(得分:0)

如果您使用Criteria查询,则可以使用Disjunction

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);