【问题标题】:Ordinal Parameter Not bound : 2 in @Query annotation序数参数未绑定:@Query 注释中的 2
【发布时间】:2019-11-20 16:18:18
【问题描述】:

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

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 ",那么它可以工作。我不知道为什么它不起作用。有什么想法吗?

注意:可见性是升级类中Set&lt;String&gt; 的类型。

【问题讨论】:

  • 不应该是WHERE ?2 MEMBER OF v 而不是WHERE v IN ?2 吗?

标签: hibernate jpa spring-data-jpa hql


【解决方案1】:

补充 Jens 的答案:注意空格

例如,这会抛出错误:

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

这会很好用:

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

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

【讨论】:

  • 谢谢。这解决了我的问题!
  • 空间....那个空间!!!非常感谢!
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    @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 " +
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      • 2020-08-11
      • 2019-09-24
      • 1970-01-01
      相关资源
      最近更新 更多