使用 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 列 [从配置文件 p 中选择 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();
}
When I run the method: dao.query("SELECT p FROM Profile p WHERE p.group = :id ORDER BY p.datestamp :key", map);
I get the following error:
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]
Following is the query method implemenation; anyone see what is wrong?
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();
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不能使用参数来指定排序方向,因为参数不能在查询的任意位置使用。来自 JPA 规范:
因此,在 JPA 1.0 中,您必须使用适当的
ORDER
子句手动构建查询字符串。在 JPA 2.0 中,您可以使用 Criteria API 来构建动态查询。
You cannot use parameters to specify sorting direction, because parameter cannot be used in arbitrary places of the query. From JPA spec:
So, in JPA 1.0 you have to build query string with appropriate
ORDER
clause manually.In JPA 2.0 you can use Criteria API to construct dynamic queries.
我认为您在
ORDER BY p.datestamp
之后和:key
之前需要一个逗号I think you need a comma after
ORDER BY p.datestamp
and before:key