当我运行该方法时: dao.query("SELECT p FROM Profile p WHERE p.group = :id ORDER BY p.datestamp :key", map);
我收到以下错误:
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();
}
最佳答案
不能使用参数来指定排序方向,因为参数不能在查询的任意位置使用。来自 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 构建动态查询。
关于java - 使用 JPQL 创建查询——查询语法异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4210308/