当我运行方法时: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();
}
答案 0 :(得分:4)
您不能使用参数指定排序方向,因为参数不能在查询的任意位置使用。来自JPA规范:
输入参数只能在查询的WHERE子句或HAVING子句中使用。
因此,在JPA 1.0中,您必须手动构建具有适当ORDER
子句的查询字符串。
在JPA 2.0中,您可以使用Criteria API构建动态查询。
答案 1 :(得分:0)
我认为您需要在ORDER BY p.datestamp
之后和:key