报错Ordinal parameter not bound
#背景
使用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相关推荐
- 写SpringBoot项目的时候,报错Ordinal parameter not bound
文章目录 一.背景 二.解决 一.背景 使用JPA更新数据的时候,做Junit始终报错Ordinal parameter not bound,异常信息是 org.springframework.dao ...
- 【错误记录】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 ...
- 报错:Parameter ‘XXX‘ implicitly has an ‘any‘ type.解决方法
报错:Parameter 'XXX' implicitly has an 'any' type.解决方法 tsconfig.json添加"noImplicitAny": false ...
- mybatis报错:parameter ' ' not fount.Available parameters are [0, 1, param1, param2]
mybatis报错:parameter ' ' not fount.Available parameters are [0, 1, param1, param2] 这种原因就是因为参数没有对应上.解决 ...
- 【问题记录】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. ...
- MyBatis批量操作报错:Parameter 'xxxList' not found. Available parameters are [list]
问题背景: 在Dao中使用MyBatis进行查询操作,参数是传的一个List:studentNameList,但是在执行查询的时候报错,具体日志如下: Shell代码 com.chenzhou.b ...
- SpringBoot启动报错:Parameter 0 of method hmset in com.qcby.rbac.util.RedisUtils required a bean of type
SpringBoot启动报错,报错信息如下: 报错是由于A类中定义了含参数的构造函数,Spring自动构造和注入时未为该Bean传入参数,引起报错. 查了很多资料,最后发现,我是因为注释的时候没有把@ ...
- spring boot报错:Parameter 4 of constructor in xx required a bean of type ‘xx‘ that could not be found.
spring boot 项目启动服务时,报错: 根据报错提示,一直认为是 SpringBootApplication 没有扫描到对应的 bean 路径. 最后,仔细排查发现是粗心的问题,自定义的常量没 ...
- python报错ordinal not in range(128)
python编码问题:'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in range(128) 这种问题有三种原因: ...
- 批量插入报错:Parameter ‘id‘ not found. Available parameters are [forlonList, param1]
项目场景: 在开发中,需要通过批量插入,生成主键id,然后进行数据关联操作 问题描述 Caused by: org.apache.ibatis.executor.ExecutorException: ...
最新文章
- python窗体开发环境_Python窗口开发环境boa-constructor教程2:创建状态栏:
- 使用SpringMVC 的MultipartFile文件上传时参数获取的一个坑
- publiccms实现遍历多级分类下的不同样式内容
- Python环境下,提高pip安装库速度的方法!
- Flink 零基础实战教程:如何计算实时热门商品
- python执行效果_使用tqdm显示Python代码执行进度功能
- 互联网晚报 | 9月2日 星期四 | 小米汽车有限公司正式成立;唯品富邦消费金融获批开业;恒大举行保交楼军令状签署大会...
- 原创 | 面试官问我同步容器(如Vector)的所有操作一定是线程安全的吗?我懵了!...
- Oracle数据泵备份与恢复 命令 expdp/impdp 用法详解
- 渗透测试 已学课时 1 个_我14岁上创业课时学到的东西
- 黑鲨或将在明天公布黑鲨4系列游戏手机
- mairdb自动备份_MariaDB 备份方法
- CNN vs RNN vs ANN——3 种神经网络分析模型,你 Pick 谁?
- Python 数据结构与算法 —— 从分治的角度看快速排序、归并排序
- java for语句_Java for循环语句
- 使用Google Chrome Frame(谷歌浏览器内嵌框架)解决低版本IE不兼容问题
- ahci驱动,详细教您win10系统下怎么加载ahci驱动
- Unity的超大开放世界解决方案
- Ps2021软件安装Mac(含M1)、Windows版
- 互联网电影购票网站调查思考
热门文章
- 树莓派 网络附加存储NAS系统和USB外接硬盘文件服务器
- softice 常用操作
- 计算机视觉实习面试经历
- html5 live,html5 audio livestreaming
- Multiple dex files define Lrx/android/plugins/RxAndroidPlugins;
- 包误差率(PER)与BER相关
- python实现动态桌面壁纸(精简)
- 【运维】linux shell 编程之函数使用
- tar压缩文件时忽略指定文件夹、文件
- 打通法律服务群众“最后一公里”,方正璞华劳动人事法律自助咨询服务平台频获“点赞”