1
我需要使用從Map獲取的參數進行查詢。在foreach中使用setParameter設置參數的JPA設置好像只設置了一個參數
public String executeQuery(String string, Map<String, String> params) {
try {
Query query = em.createQuery(string);
System.out.println(em.createQuery(string).getClass());
for(String key:params.keySet()) {
query.setParameter(key, params.get(key));
System.out.println("query.setParameter("+key+","+ params.get(key)+");");
}
List<?> list = query.getResultList();
return list.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
偉大的以下工作:
Query query = em.createQuery("select u from User u where u.email=:email or u.name=:name");
query = query.setParameter("email","admin");
query = query.setParameter("name","name1");
List<?> list = query.getResultList();
return list.toString();
我得到的用戶兩個實例,一個是管理,一個用於姓名1。 但是,當我使用上面的代碼設置完全相同的查詢時,我只得到一個結果(通常用於後一個參數)。
是否使用:name或?1無關緊要。 foreach中的每個setParameter()都有正確的參數。 在foreach塊之後的查詢有兩個參數設置正確 - 我用它來檢查(1語法):
"Parameters: "+query.getParameter("name").getName()+ ": "+ query.getParameterValue("name")+", "+query.getParameter("email").getName() +": "+query.getParameterValue("email");
我用Glassfish的3.1.2,4.1.5休眠SP1,MySQL社區服務器5.5。 該方法置於無狀態會話bean中。
是字符串中的executeQuery完全一樣的人在工作的例子嗎? – Korgen 2012-08-08 12:05:15
是的。我嘗試了更多版本的問題,但是這個問題並不適用。 – tarsis 2012-08-08 14:26:42