JPA/Hibernate Query 不识别命名参数

Posted

技术标签:

【中文标题】JPA/Hibernate Query 不识别命名参数【英文标题】:JPA/Hibernate Query do not recognize named parameters 【发布时间】:2019-05-29 15:15:53 【问题描述】:

此方法不适用于参数

    @Override
public List<T> findBy2Params(Class c, String param1, String value1, String param2, String value2) 

    Query q = em.createQuery("select o from :class o where o.:param1 =   ':value1' "
            + " and o.:param2 = 'value2' ");
    q.setParameter("class", c.getName());
    q.setParameter("param1", param1);
    q.setParameter("value1", value1);
    q.setParameter("param2", param2);
    q.setParameter("value2", value2);
    return q.getResultList();

在 ":" 上抛出错误;不将其视为参数

java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: 意外令牌: : 第 1 行附近,第 15 列 [从 :class o 中选择 o,其中 o.:param1 = ':value1' 和 o .:param2 = 'value2' ]

【问题讨论】:

【参考方案1】:

您的查询将不起作用,因为您无法像那样绑定表名或列名。

执行计划开始时需要知道表名和相关列,发生在参数绑定之前。

这样做的唯一方法是在传递给 HQL 之前替换这些值,或者使用更动态的方法在运行时使用 Criteria API 构建查询。

【讨论】:

以上是关于JPA/Hibernate Query 不识别命名参数的主要内容,如果未能解决你的问题,请参考以下文章

如何更新 Spring Data JPA @Modifying @Query 查询中的 JPA/Hibernate @Version 字段?

如何在 Jpa Hibernate Query 中将数字数组作为参数传递? [关闭]

JPA/Hibernate 本机查询无法识别参数

这可能吗:JPA/Hibernate query with list property in result?

spring boot 中Spring data jpa数据库表字段命名策略

如何将 LocalDateTime 提供给 jpa/hibernate 查询?