我是JPA的新手。JPA where clause任何
在JPA,查詢:
Query query = entityManager.createQuery("select o from Product o WHERE o.category = :value");
query.setParameter("category", category);
我怎樣才能設置類別在JPA任何類別?所以如果空類別通過,我簡單地忽略類別參數,選擇所有產品。
我是JPA的新手。JPA where clause任何
在JPA,查詢:
Query query = entityManager.createQuery("select o from Product o WHERE o.category = :value");
query.setParameter("category", category);
我怎樣才能設置類別在JPA任何類別?所以如果空類別通過,我簡單地忽略類別參數,選擇所有產品。
SELECT * FROM產品類別爲*
我想你是新的SQL,太。
WHERE CATEGORY = *
並不意味着「任何類別」(它甚至不是有效的SQL)。
在SQL和JPA中,如果您想要任何類別(或者在SQL中可以使用WHERE CATEGORY IS NOT NULL
),則根本就沒有WHERE
子句。
如何將類別設置爲JPA中的任何類別?所以如果空類別通過,我簡單地忽略類別參數,選擇所有產品。
您必須在此處動態構建查詢。隨着HQL(這是一個簡化的例子):
Map<String, Object> params = new HashMap<String, Object>();
StringBuffer hql = new StringBuffer("from Product p");
boolean first = true;
if (category != null) {
hql.append(first ? " where " : " and ");
hql.append("p.category = :category");
params.put("category", category);
}
// And so on...
Query query = session.createQuery(hql.toString());
Iterator<String> iter = params.keySet().iterator();
while (iter.hasNext()) {
String name = iter.next();
Object value = params.get(name);
query.setParameter(name, value);
}
List results = query.list()
但是,實際上,我的建議是在這裏使用Criteria API:
Criteria criteria = session.createCriteria(Product.class);
if (category != null) {
criteria.add(Expression.eq("category", category);
}
// And so on...
List results = criteria.list();
複雜的動態查詢簡單得多。
標準是動態查詢的更好解決方案。 Expression.eq已被棄用,相反,您可以使用Restrictions.eq – Gere
要歸檔參數成爲可選的,你可以編寫一個查詢,而無需使用Criteria API:
select o from Product o WHERE :value is null or :value='' or o.category = :value
您好,我想知道是否可以使用此類帖子http:// stackoverflow中的查詢進行此類評估。COM /問題/ 570229 /休眠 - HQL查詢,如何對設置一個收集作爲一種名爲參數對的一查詢。所以這個查詢不能在我的項目中工作,如下所示:FROM Foo WHERE id =:id AND(:barlist爲null或Bar in(:barlist)) –
我怎樣才能設置類別在JPA任何類別?所以如果空分類 通過,我簡單地忽略分類參數,選擇所有產品。
您可以將類別設置爲「%」。 if(category == null)query.setParameter(「category」,「%」); else query.setParameter(「category」,category);
你是對的,幾乎沒有什麼變化。
Query query = entityManager.createQuery("select o from Product o WHERE o.category = :value");
query.setParameter("value", category);
在setParamater
「價值」(具體文本)應與「:值」 查詢。
抱歉錯誤的SQL查詢:) 您的解決方案「WHERE CATEGORY不是NULL」很好,但我必須創建另一個查詢。 有沒有其他方法可以保存一個查詢? –