2013-01-08 64 views
0

我試圖與多個創建HQL查詢其中相同休眠HQL查詢

result = sessionFactory.getCurrentSession().createQuery("from County where " + [0].property + "=?"+","+ c[1].property + "=?") 

.setParameter paramteres(0,C [0]。價值)
.setParameter(1,C [1]。價值).LIST();的

,而不是做這個,我想創建一個查詢,可以處理任何數量的paramters像

for(Params c:parms){`enter code here` 
    queryString+= c.property +" = "+c.value+","; 
    } 
result = (State) sessionFactory.getCurrentSession() 
       .createQuery("from County where " +queryString) 
       .list().get(0); 

有查詢看起來是正確的,但它說:「不能執行查詢」

回答

1

一)爲什麼你放棄了使用像你一樣的準備好的聲明是固定大小的參數?

b)爲什麼你將c.property +" = "+c.value+",";歸於「result」而不是queryString?

c)這個逗號是幹什麼的?它不應該是「和」還是「或」?

再評論你的答案

「一)使用多個PAMS而不是固定大小」

String whereClause = new String(); 
for (Params p : params) { 
    if (whereClause.isEmpty()) 
     whereClause = " where "; 
    else 
     whereClause += " and "; 
    whereClause += p.property + " = ? "; 
} 
Query query = sessionFactory.getCurrentSession().createQuery("from County " + whereClause); 
for (int i = 0; i<params.size(); i++) { 
    query.setParameter(i, params[i].value); 
} 
result = (State) query.list().get(0); 

「C),即使我有哪裏使用上述代碼失敗只有一個PARAM !「 - 」

嗯,是的,即使你有一個參數,你仍然在最後添加逗號查詢。這不是一個有效的格式

+0

a)使用多個pams而不是固定大小b)它應該是queryString c)即使我只有一個參數用於上述代碼失敗的地方! –

+0

@ user1827614看到我的編輯 – beder

+0

謝謝,這有助於! –