【问题标题】:expecting IDENT, found ':'期待 IDENT,找到 ':'
【发布时间】:2021-06-16 23:34:29
【问题描述】:

我正在为我的 Spring 项目构建一个本机查询。有人知道问题是什么吗?

@Query(value = "SELECT e.first_name as firstName, e.last_name as lastName, jh.start_date as startDate, jh.end_date as endDate, " +
                "j.job_title as jobName, d.department_name as departmentName FROM JOB_HISTORY jh " +
                "JOIN JOBS j ON jh.JOB_ID = j.JOB_ID " +
                "JOIN DEPARTMENTS d ON JH.DEPARTMENT_ID = d.DEPARTMENT_ID " +
                "JOIN EMPLOYEES e ON jh.EMPLOYEE_ID = e.EMPLOYEE_ID " +
                "ORDER BY jh.:sortBy :orderBy")
        List<EmployeeJobView> getAllEmployeeJob(String sortBy, String orderBy);

org.hibernate.hql.internal.ast.QuerySyntaxException:期待 IDENT, 在第 1 行第 348 列附近找到 ':' [SELECT e.first_name as firstName, e.last_name 作为 lastName,jh.start_date 作为 startDate,jh.end_date 作为 endDate,j.job_title 作为 jobName,d.department_name 作为部门名称 FROM JOB_HISTORY jh JOIN JOBS j ON jh.JOB_ID = j.JOB_ID JOIN DEPARTMENTS d ON JH.DEPARTMENT_ID = d.DEPAR TMENT_ID JOIN EMPLOYEES e ON jh.EMPLOYEE_ID = e.EMPLOYEE_ID ORDER BY jh.:sortBy :orderBy]

【问题讨论】:

  • 如果你想构建一个原生查询,你需要使用你的数据库接受的原生 sql。 "jh.:sortBy :orderBy" 根本不是有效的 sql,看起来您从显然不是本机查询的东西中复制了它,而是从稍后插入这些值的某种准备好的语句中复制的。
  • 问题是 jh.:sortBy 这个应该是什么?
  • 如果你想执行原生查询,你必须设置属性 nativeQuery=true
  • 我试图在参数中引用 sortBy 和 orderBy,如上所示: List getAllEmployeeJob(String sortBy, String orderBy); .它只是在构建过程中崩溃,而不是在运行时。

标签: java spring hibernate jpa


【解决方案1】:

如果我猜对了,我会用 SPeL 重写最后一行:

"ORDER BY jh.?#{[0]} ?#{[1]}"

正如Simon Martinelli 提到的,你应该使用nativeQuery = true

另请参阅此处的 SPeL 与 JPA 指南 https://spring.io/blog/2014/07/15/spel-support-in-spring-data-jpa-query-definitions

【讨论】:

  • 会的。谢谢
猜你喜欢
  • 2011-12-21
  • 2019-08-12
  • 2017-11-19
  • 2015-05-10
  • 1970-01-01
  • 2019-11-30
  • 2019-02-16
  • 1970-01-01
  • 2021-09-17
相关资源
最近更新 更多