2011-02-27 152 views
10

我想要寫一個SELECT語句,但無法弄清楚如何寫在where子句選擇查詢...JPA與where子句

我的代碼:

CriteriaQuery query = entityManager.getCriteriaBuilder().createQuery(); 
query.select(query.from(SecureMessage.class)).where(); 

這是一個方法內我正在傳遞一個字符串。我只想獲取匹配Im傳遞給方法的字符串值的行。

+0

實際上,這裏沒有任何關聯到JSF的問題。這是JPA語法的問題。 – sergionni 2011-02-27 22:47:22

回答

11

據我所知,方法參數應該是查詢的參數。

所以,應該是這樣的:

Query query = entityManager.getCriteriaBuilder().createQuery("from SecureMessage sm where sm.someField=:arg1"); 
query.setParameter("arg1", arg1); 

其中arg1 - 你的方法字符串參數

+0

這並不適用於我的隊友......事實上,你的第一行甚至不會編譯..如果我刪除了getCriteriaBuilder()它編譯但仍然不運行查詢..throws javax.faces.el.E​​valuationException: javax.ejb.EJBException異常 – mixkat 2011-02-28 05:40:22

18

在標準這是一樣的東西:

CriteriaBuilder cb = entityManager.getCriteriaBuilder(); 
CriteriaQuery<SecureMessage> query = cb.createQuery(SecureMessage.class); 
Root<SecureMessage> sm = query.from(SecureMessage.class); 
query.where(cb.equal(sm.get("someField"), "value")); 

在JPQL:

Query query = entityManager.createQuery("Select sm from SecureMessage sm where sm.someField=:arg1"); 
query.setParameter("arg1", arg1); 

請參閱, http://en.wikibooks.org/wiki/Java_Persistence/Querying#Criteria_API_.28JPA_2.0.29