JPA /休眠查询无法识别命名参数

时间:2019-01-03 01:51:06

标签: hibernate jpa java-ee hql jpql

此方法不适用于参数

    @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 个答案:

答案 0 :(得分:1)

您的查询将无法正常工作,因为您无法绑定这样的表名或列名。

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

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