2011-12-12 121 views
0

我想在那裏建一些字段正在從基於用戶選擇的客戶端發送的查詢。 我打算創建一個基於用戶選擇的動態查詢。儘管我可以通過一些java代碼和數據庫簡單地做到這一點,但讓hibernate爲我啓動該查詢並返回結果。使用動態where子句冬眠

我的問題是,使用建立在休眠機制,我可以做的一樣。 例如,我會得到一張地圖說

(cond1:a,cond2:b,cond3:c) 

唯一的區別是值地圖可以包含的數量,並根據我想提前創建查詢 像

select * from demo where cond1='a' and cond2='b' and cond3='c'; and may be 
select * from demo where cond1='a' and cond2='b'; when map has only 2 values 

感謝

回答

3

這不應該是通過使用criteria問題。

CriteriaBuilder queryBuilder = em.getCriteriaBuilder(); 
CriteriaQuery query = queryBuilder.createQuery(); 
Root<Demo> demo = query.from(Demo.class); 

Iterator it = map.entrySet().iterator(); 
Map.Entry wherePair = (Map.Entry)it.next(); // This is retrieved for creating the where clause 
query.where(wherePair.getKey() + "=" + wherePair.getValue()); 

while (it.hasNext()) { 
    Map.Entry pairs = (Map.Entry)it.next(); 
    query.and(" " + pairs.getKey() + "=" + pairs.getValue()); 
} 

我不能保證它會編譯,但那會是主意。

2

您可以使用Criteria queries,它們專爲此場景而設計。創建標準查詢後,您可以遍歷地圖並向查詢添加適當的限制。