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

标签 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: 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/

相关文章:

java - 如何导出为可运行的桌面应用程序java?

java - MouseListener 给 show() 方法带来了问题

sql-server - 如何在spring jpa实体中提及sqlserver数据库名称?

java - 如何在 LIKE jpql 查询中使用引号?

java - 如何解决自定义存储库 JPA 中的错误 "error in your SQL syntax"

java - <tx :annotation-driven/> leads to java. lang.ClassNotFoundException : org. aopalliance.aop.Advice

java - 在提供的示例的上下文中,使用synchronized(this) 将方法划分为多个部分是否有助于提高性能?

java - 读取和写入 ChannelBuffer 无法正常工作

hibernate :- Could not execute JDBC batch update

java - 实体类在 AbstractGenericDao 中如何工作?