期待 IDENT,找到 ':'
Posted
技术标签:
【中文标题】期待 IDENT,找到 \':\'【英文标题】: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如果我猜对了,我会用 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。
【讨论】:
会的。谢谢以上是关于期待 IDENT,找到 ':'的主要内容,如果未能解决你的问题,请参考以下文章