说出超出声明的序数参数数量的位置

Bla*_*man 7 java hibernate

我想用hibernate执行本机/原始mysql查询,我有这个:

 sessionFactory.getCurrentSession().createSQLQuery(
       "update table1 set someCounter = someCounter + 1 where id = ?")
     .setParameter(1, someId)
     .executeUpdate();
Run Code Online (Sandbox Code Playgroud)

我收到错误:

threw exception [Request processing failed; nested exception is
      org.hibernate.QueryParameterException: Position beyond number of declared ordinal
      parameters. Remember that ordinal parameters are 1-based! Position: 2] 
      with root cause
      org.hibernate.QueryParameterException: Position beyond number of declared ordinal
      parameters. Remember that ordinal parameters are 1-based! Position: 2
Run Code Online (Sandbox Code Playgroud)

这有什么不对?

Yog*_*ngh 14

0自参数索引开始 使用索引0.

sessionFactory.getCurrentSession()
  .createSQLQuery("update table1 set someCounter = someCounter + 1 where id = ?")
  .setParameter(0, someId)
  .executeUpdate();
Run Code Online (Sandbox Code Playgroud)

由于您使用的是Hibernate,因此您也可以使用命名参数

sessionFactory.getCurrentSession()
  .createSQLQuery("update table1 set someCounter = someCounter + 1 where id = :id")
  .setParameter("id", someId)
  .executeUpdate();
Run Code Online (Sandbox Code Playgroud)

  • 命名参数的使用适用于Java Persistence查询语言,并未针对本机查询定义. (2认同)
  • 但异常消息本身就是说它是基于1的. (2认同)