2011-08-17 64 views
0

我正在使用Spring + Hibernate(HQL)。
我有一個需求,因爲每次參數不同,我需要多次激發選擇查詢。
對於實施例
有什麼方法可以在Hibernate中擁有單個select查詢而不是多個select查詢?

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

你可以使用UNION,但據我所知,UNION在HQL中不受支持。如果這種限制仍持有,那麼你可能回落到本地SQL如果使用Criteria查詢使用此

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 
0

,你可以使用一個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);