2010-11-17 54 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来构建动态查询。