期待 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 getAllEmployeeJob(String sortBy, String orderBy); .它只是在构建过程中崩溃,而不是在运行时。 【参考方案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。

【讨论】:

会的。谢谢

以上是关于期待 IDENT,找到 ':'的主要内容,如果未能解决你的问题,请参考以下文章

混合玩笑期待与排毒期待

转:领导力最大的障碍,是“外部期待”编织的陷阱

期待2021 期待全新的自己

期待2021 期待全新的自己

我的代码在使用时中断 - 不期待 T_ELSE,期待 T_FUNCTION

我的代码在使用时中断 - 不期待 T_ELSE,期待 T_FUNCTION