jpa 序号参数未绑定:2 in @Query注解

disho6za  于 2022-12-13  发布在  其他
关注(0)|答案(3)|浏览(382)

尝试运行此查询时出现以下错误
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);

如果我把" WHERE v IN ?2 "换成" WHERE v IN ?2 OR v IN ?1 ",那么它就能工作。我不知道为什么它不能工作。有什么想法吗?
注意:在Upgrade类别中,可视性的类型为Set<String>

hgc7kmma

hgc7kmma1#

补充一下延斯的回答:注意空格!
例如,这会掷回错误:
"WHERE v IN ?2" + "AND amu.id= ?1 "
这样就可以了:
"WHERE v IN ?2 " + "AND amu.id= ?1 "
这是一个很容易被忽视的微小差别。

ktecyv1j

ktecyv1j2#

问题是在查询中只声明了一个绑定参数,但在方法中实际上有两个参数。
这是因为在"AND amu.id= '?1' "中,看起来像bind参数的内容实际上是一个字符串文字,因为它包含了引号。如果你想把它作为bind参数处理,请去掉引号:"AND amu.id= ?1 "

vpfxa7rd

vpfxa7rd3#

我遇到了同样的问题。我的代码是这样的:

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

在传递新行之前,我忘记在双引号前加空格了。这会导致SQL错误,而且看不到第二个参数。我只是加了空格就解决了。

"AND amu.id= ?1 " +

相关问题