2010-11-17 19 views
2

當我運行的方法:dao.query("SELECT p FROM Profile p WHERE p.group = :id ORDER BY p.datestamp :key", map);我得到以下錯誤:使用JPQL創建查詢 - 查詢語法異常

org.hibernate.hql.ast.QuerySyntaxException: unexpected token: : near line 1, column 93 [SELECT p FROM Profile p WHERE p.group = :id ORDER BY p.datestamp :key]

以下是查詢方法實行;任何人看到什麼是錯的?

public List<?> query(String criteria, HashMap<String, ?> args) { 
     Query sqlQuery = this.em.createQuery(criteria); 
     Set<String> keys = args.keySet(); 
     Iterator<String> iter = keys.iterator(); 
     while (iter.hasNext()) { 
      String key = iter.next(); 
      sqlQuery.setParameter(key, args.get(key)); 
     } 
     return sqlQuery.getResultList(); 
    } 
+0

你想達到什麼目的?這段代碼現在看起來完全沒有意義。 – axtavt 2010-11-18 13:37:10

+0

@axtavt:我試圖選擇具有特定組ID的配置文件,並且我想根據':key'參數在'DESC'或'ASC'中按照它們的日期戳排序配置文件。 – AMS12 2010-11-18 18:24:37

回答

0

我想你需要一個逗號ORDER BY p.datestamp之後和之前:key

+0

感謝您的建議,但它並不完美。實質上,我試圖達到這個目的:'SELECT p FROM Profile p WHERE p.group =:id ORDER BY p.datestamp [ASC | DESC]'其中的順序是由':key'參數決定的。 – AMS12 2010-11-18 18:25:47

4

不能使用參數指定排序的方向,因爲參數不能查詢的任意地方使用。從JPA規範:

Input parameters can only be used in the WHERE clause or HAVING clause of a query.

所以,在JPA 1.0你必須手動建立查詢字符串適當ORDER條款。

在JPA 2.0中,您可以使用Criteria API來構建動態查詢。