#背景

使用JPA更新数据的时候,做Junit始终报错Ordinal parameter not bound,异常信息是

org.springframework.dao.InvalidDataAccessResourceUsageException: Ordinal parameter not bound : 10; nested exception is org.hibernate.QueryException: Ordinal parameter not bound : 10at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:305)at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:250)at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:527)at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61)at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:242)at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:153)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:144)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$ExposeRepositoryInvocationInterceptor.invoke(CrudMethodMetadataPostProcessor.java:364)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)at org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:61)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)at com.sun.proxy.$Proxy114.saveOptionsFeeTermsDetail(Unknown Source)at com.xxx.xx.xxx.xxx.xxx.repository.xxxRepositoryTest.testSavexxxx(xxxRepositoryTest.java:52)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74)at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)at org.junit.runners.ParentRunner.run(ParentRunner.java:363)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)at org.junit.runner.JUnitCore.run(JUnitCore.java:137)at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: org.hibernate.QueryException: Ordinal parameter not bound : 10at org.hibernate.query.internal.QueryParameterBindingsImpl.verifyParametersBound(QueryParameterBindingsImpl.java:213)at org.hibernate.query.internal.AbstractProducedQuery.beforeQuery(AbstractProducedQuery.java:1403)at org.hibernate.query.internal.NativeQueryImpl.beforeQuery(NativeQueryImpl.java:246)at org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1582)at org.springframework.data.jpa.repository.query.JpaQueryExecution$ModifyingExecution.doExecute(JpaQueryExecution.java:263)at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:91)at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:136)at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:125)at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:605)at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.lambda$invoke$3(RepositoryFactorySupport.java:595)at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:595)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:59)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294)at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)... 45 more

#解决

首先看下我的代码
xxxRepository

 @Modifying@Transactional@Query(value = "UPDATE "+"xxx.dbo.xxxx"+"SET "+"xxx1= :#{#aaa.a}, "+"xxx2= :#{#aaa.b}, "+"xxx3= :#{#aaa.n}, "+"xxx4= :#{#aaa.f}, "+"xxx5= :#{#aaa.g}, "+"xxx6= :#{#aaa.h}, "+"xxx7= :#{#aaa.j}, "+"xxx8= getdate(), "+"xxx9=?2 "+"WHERE "+"xxxId=(SELECT xxxId FROM xxx.dbo.bbbb WHERE TermSheetId = ?3 )", nativeQuery = true)void saveXXXX(@Param("aaa") XXXX aaa, String userId, int termSheetId);

最开始怀疑是
①参数顺序的错,可是不管?2和?3怎么换(换成?1和?2)还是报错。
②加上@Param参数绑定也依然出错。
③以为是空格引起的错误,可是各种参数?2和?3附近都试过加空格去空格也都没用

接下来,敲黑板,重点来了。
我们需要把需要?1 ?2绑定的放在前面,之后序号从?1开始计算,把使用@Param的放到最后,总之就是在SQL使用?1这种序号绑定的要放在参数前面。

比如把void saveXXXX(@Param("aaa") XXXX aaa, String userId, int termSheetId);
换成void saveXXXX(String userId, int termSheetId, @Param("aaa") XXXX aaa);
之后序号从?1,?2开始绑定

修改后的代码

 @Modifying@Transactional@Query(value = "UPDATE "+"xxx.dbo.xxxx"+"SET "+"xxx1= :#{#aaa.a}, "+"xxx2= :#{#aaa.b}, "+"xxx3= :#{#aaa.n}, "+"xxx4= :#{#aaa.f}, "+"xxx5= :#{#aaa.g}, "+"xxx6= :#{#aaa.h}, "+"xxx7= :#{#aaa.j}, "+"xxx8= getdate(), "+"xxx9=?1 "+"WHERE "+"xxxId=(SELECT xxxId FROM xxx.dbo.bbbb WHERE TermSheetId = ?2 )", nativeQuery = true)void saveXXXX(String userId, int termSheetId, @Param("aaa") XXXX aaa );

如此,问题解决。

报错Ordinal parameter not bound相关推荐

  1. 写SpringBoot项目的时候,报错Ordinal parameter not bound

    文章目录 一.背景 二.解决 一.背景 使用JPA更新数据的时候,做Junit始终报错Ordinal parameter not bound,异常信息是 org.springframework.dao ...

  2. 【错误记录】Flutter 编译报错 ( The parameter ‘‘ can‘t have a value of ‘null‘ because of its type, but the im )

    文章目录 一.报错信息 二.解决方案 一.报错信息 打开了一个去年写的 Flutter 项目 , 发现直接报错 ; The parameter 'icon' can't have a value of ...

  3. 报错:Parameter ‘XXX‘ implicitly has an ‘any‘ type.解决方法

    报错:Parameter 'XXX' implicitly has an 'any' type.解决方法 tsconfig.json添加"noImplicitAny": false ...

  4. mybatis报错:parameter ' ' not fount.Available parameters are [0, 1, param1, param2]

    mybatis报错:parameter ' ' not fount.Available parameters are [0, 1, param1, param2] 这种原因就是因为参数没有对应上.解决 ...

  5. 【问题记录】04 MyBatis报错:Parameter ‘XXX‘ not found. Available parameters are [page, hashMap, param1, param

    1.报错信息如下: nested exception is org.apache.ibatis.binding.BindingException:Parameter 'XXX' not found. ...

  6. MyBatis批量操作报错:Parameter 'xxxList' not found. Available parameters are [list]

    问题背景: 在Dao中使用MyBatis进行查询操作,参数是传的一个List:studentNameList,但是在执行查询的时候报错,具体日志如下: Shell代码   com.chenzhou.b ...

  7. SpringBoot启动报错:Parameter 0 of method hmset in com.qcby.rbac.util.RedisUtils required a bean of type

    SpringBoot启动报错,报错信息如下: 报错是由于A类中定义了含参数的构造函数,Spring自动构造和注入时未为该Bean传入参数,引起报错. 查了很多资料,最后发现,我是因为注释的时候没有把@ ...

  8. spring boot报错:Parameter 4 of constructor in xx required a bean of type ‘xx‘ that could not be found.

    spring boot 项目启动服务时,报错: 根据报错提示,一直认为是 SpringBootApplication 没有扫描到对应的 bean 路径. 最后,仔细排查发现是粗心的问题,自定义的常量没 ...

  9. python报错ordinal not in range(128)

    python编码问题:'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in range(128) 这种问题有三种原因: ...

  10. 批量插入报错:Parameter ‘id‘ not found. Available parameters are [forlonList, param1]

    项目场景: 在开发中,需要通过批量插入,生成主键id,然后进行数据关联操作 问题描述 Caused by: org.apache.ibatis.executor.ExecutorException: ...

最新文章

  1. python窗体开发环境_Python窗口开发环境boa-constructor教程2:创建状态栏:
  2. 使用SpringMVC 的MultipartFile文件上传时参数获取的一个坑
  3. publiccms实现遍历多级分类下的不同样式内容
  4. Python环境下,提高pip安装库速度的方法!
  5. Flink 零基础实战教程:如何计算实时热门商品
  6. python执行效果_使用tqdm显示Python代码执行进度功能
  7. 互联网晚报 | 9月2日 星期四 | 小米汽车有限公司正式成立;唯品富邦消费金融获批开业;恒大举行保交楼军令状签署大会...
  8. 原创 | 面试官问我同步容器(如Vector)的所有操作一定是线程安全的吗?我懵了!...
  9. Oracle数据泵备份与恢复 命令 expdp/impdp 用法详解
  10. 渗透测试 已学课时 1 个_我14岁上创业课时学到的东西
  11. 黑鲨或将在明天公布黑鲨4系列游戏手机
  12. mairdb自动备份_MariaDB 备份方法
  13. CNN vs RNN vs ANN——3 种神经网络分析模型,你 Pick 谁?
  14. Python 数据结构与算法 —— 从分治的角度看快速排序、归并排序
  15. java for语句_Java for循环语句
  16. 使用Google Chrome Frame(谷歌浏览器内嵌框架)解决低版本IE不兼容问题
  17. ahci驱动,详细教您win10系统下怎么加载ahci驱动
  18. Unity的超大开放世界解决方案
  19. Ps2021软件安装Mac(含M1)、Windows版
  20. 互联网电影购票网站调查思考

热门文章

  1. 树莓派 网络附加存储NAS系统和USB外接硬盘文件服务器
  2. softice 常用操作
  3. 计算机视觉实习面试经历
  4. html5 live,html5 audio livestreaming
  5. Multiple dex files define Lrx/android/plugins/RxAndroidPlugins;
  6. 包误差率(PER)与BER相关
  7. python实现动态桌面壁纸(精简)
  8. 【运维】linux shell 编程之函数使用
  9. tar压缩文件时忽略指定文件夹、文件
  10. 打通法律服务群众“最后一公里”,方正璞华劳动人事法律自助咨询服务平台频获“点赞”