使用JPQL创建查询 - 查询语法异常

时间:2010-11-17 23:34:34

标签: java hibernate jpa jpql

当我运行方法时:dao.query("SELECT p FROM Profile p WHERE p.group = :id ORDER BY p.datestamp :key", map);我收到以下错误:

  

org.hibernate.hql.ast.QuerySyntaxException:   意外的令牌::靠近第1行,   第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();
    }

2 个答案:

答案 0 :(得分:4)

您不能使用参数指定排序方向,因为参数不能在查询的任意位置使用。来自JPA规范:

  

输入参数只能在查询的WHERE子句或HAVING子句中使用。

因此,在JPA 1.0中,您必须手动构建具有适当ORDER子句的查询字符串。

在JPA 2.0中,您可以使用Criteria API构建动态查询。

答案 1 :(得分:0)

我认为您需要在ORDER BY p.datestamp之后和:key

之前使用逗号