我正在使用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)
还是其他任何优化方式?
答案 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);