序数参数未绑定:@Query 注释中的 2

use*_*111 9 hibernate jpa hql spring-data-jpa

当我尝试运行此查询时出现以下错误。

org.hibernate.QueryException: 未绑定序数参数:2",

@Query(value = "SELECT amu " +
                   "FROM Upgrade amu " +
                    "INNER JOIN FETCH amu.visibility v " +
                   " WHERE v IN ?2 " +
                    "AND amu.id= '?1' "         
   )
Optional<Upgrade> myFindMethod(final String uid, final String cid);
Run Code Online (Sandbox Code Playgroud)

如果我改变 " WHERE v IN ?2 "" WHERE v IN ?2 OR v IN ?1 ",那么它的工作原理。我不知道为什么它不起作用。任何的想法?

注意:可见性是Set<String>升级类中的类型。

Jen*_*der 12

问题是您在查询中只声明了一个绑定参数,但实际上在方法中有两个参数。

这是因为在"AND amu.id= '?1' "看起来像绑定参数的情况下,由于括起来的引号,它实际上是一个字符串文字。如果您希望将其作为绑定参数处理,请删除引号:"AND amu.id= ?1 "


Ond*_*lar 10

添加到 Jens 的答案:注意空格

例如,这将引发错误:

"WHERE v IN ?2" + "AND amu.id= ?1 "

这将正常工作:

"WHERE v IN ?2 " + "AND amu.id= ?1 "

这是一个很容易被忽视的细微差别。

  • 谢谢。这解决了我的问题! (4认同)