序数参数未绑定:@Query 注释中的 2
Ordinal Parameter Not bound : 2 in @Query annotation
当我尝试 运行 此查询时出现以下错误。
org.hibernate.QueryException: Ordinal parameter not bound : 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 "
,那么就可以了。我不知道为什么它不起作用。有什么想法吗?
注意:在升级 class 中,可见性是 Set<String>
的类型。
问题是您在查询中只声明了一个绑定参数,但实际上在方法中有两个参数。
这是因为在 "AND amu.id= '?1' "
中,由于包含引号,看起来像绑定参数的实际上是字符串文字。
如果您希望将其作为绑定参数处理,请删除引号:"AND amu.id= ?1 "
添加到 Jens 的回答中:注意空格!
例如,这将抛出错误:
"WHERE v IN ?2" +
"AND amu.id= ?1 "
这会很好用:
"WHERE v IN ?2 " +
"AND amu.id= ?1 "
这是一个很容易被忽略的微小差异。
我遇到了同样的问题。
我的代码是这样的:
@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);
我忘记在传递新行之前在双引号前加上 space。
它会导致 SQL 错误并且看不到第二个参数。
我刚加了space就解决了
"AND amu.id= ?1 " +
当我尝试 运行 此查询时出现以下错误。
org.hibernate.QueryException: Ordinal parameter not bound : 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 "
,那么就可以了。我不知道为什么它不起作用。有什么想法吗?
注意:在升级 class 中,可见性是 Set<String>
的类型。
问题是您在查询中只声明了一个绑定参数,但实际上在方法中有两个参数。
这是因为在 "AND amu.id= '?1' "
中,由于包含引号,看起来像绑定参数的实际上是字符串文字。
如果您希望将其作为绑定参数处理,请删除引号:"AND amu.id= ?1 "
添加到 Jens 的回答中:注意空格!
例如,这将抛出错误:
"WHERE v IN ?2" +
"AND amu.id= ?1 "
这会很好用:
"WHERE v IN ?2 " +
"AND amu.id= ?1 "
这是一个很容易被忽略的微小差异。
我遇到了同样的问题。 我的代码是这样的:
@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);
我忘记在传递新行之前在双引号前加上 space。 它会导致 SQL 错误并且看不到第二个参数。 我刚加了space就解决了
"AND amu.id= ?1 " +