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

发布于 2024-10-03 13:38:29 字数 778 浏览 1 评论 0原文

当我运行该方法时: 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

等待我真够勒 2024-10-10 13:38:29

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

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

因此,在 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:

Input parameters can only be used in the WHERE clause or HAVING clause of a query.

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.

走野 2024-10-10 13:38:29

我认为您在 ORDER BY p.datestamp 之后和 :key 之前需要一个逗号

I think you need a comma after ORDER BY p.datestamp and before :key

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文