MyBatis 批量插入主键回写:使用 Mybatis 操作批量插入时有如下异常,Mybatis 版本: 3.2.4 DB: MySQL。
- ExecutorException: Error getting generated key or setting result to parameter object. Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [list]
异常详情:
- [2017 - 02 - 16 17 : 20 : 00] ERROR com.alibaba.dubbo.rpc.filter.ExceptionFilter(line / :87) - [DUBBO] Got unchecked and undeclared exception which called by null.service: com.paas.user.service.modular.IModularService,
- method: batchInsertModulars,
- exception: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object.Cause: org.apache.ibatis.binding.BindingException: Parameter 'id'not found.Available parameters are[list],
- dubbo version: 2.5.3,
- current host: 127.0.0.1org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object.Cause: org.apache.ibatis.binding.BindingException: Parameter 'id'not found.Available parameters are[list] at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java: 75) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java: 371) at com.sun.proxy.$Proxy9.insert(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java: 240) at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java: 46) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java: 43) at com.sun.proxy.$Proxy36.batchInsertModulars(Unknown Source) at com.paas.user.service.ModularServiceImpl.batchInsertModulars(ModularServiceImpl.java: 91) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 43) at java.lang.reflect.Method.invoke(Method.java: 606) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java: 317) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java: 183) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java: 150) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java: 96) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java: 260) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java: 94) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java: 172) at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java: 91) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java: 172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java: 204) at com.sun.proxy.$Proxy37.batchInsertModulars(Unknown Source) at com.alibaba.dubbo.common.bytecode.Wrapper37.invokeMethod(Wrapper37.java) at com.alibaba.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java: 46) at com.alibaba.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java: 72) at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java: 53) at com.alibaba.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java: 64) at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java: 91) at com.alibaba.dubbo.rpc.filter.TimeoutFilter.invoke(TimeoutFilter.java: 42) at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java: 91) at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java: 75) at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java: 91) at com.alibaba.dubbo.rpc.protocol.dubbo.filter.TraceFilter.invoke(TraceFilter.java: 78) at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java: 91) at com.alibaba.dubbo.rpc.filter.ContextFilter.invoke(ContextFilter.java: 60) at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java: 91) at com.alibaba.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java: 112) at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java: 91) at com.alibaba.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java: 38) at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java: 91) at com.alibaba.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java: 38) at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java: 91) at com.alibaba.dubbo.rpc.proxy.InvokerInvocationHandler.invoke(InvokerInvocationHandler.java: 52) at com.alibaba.dubbo.common.bytecode.proxy30.batchInsertModulars(proxy30.java) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 43) at java.lang.reflect.Method.invoke(Method.java: 606) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java: 317) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java: 183) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java: 150) at org.springframework.remoting.support.RemoteInvocationTraceInterceptor.invoke(RemoteInvocationTraceInterceptor.java: 77) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java: 172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java: 204) at com.sun.proxy.$Proxy105.batchInsertModulars(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 43) at java.lang.reflect.Method.invoke(Method.java: 606) at org.springframework.remoting.support.RemoteInvocation.invoke(RemoteInvocation.java: 205) at org.springframework.remoting.support.DefaultRemoteInvocationExecutor.invoke(DefaultRemoteInvocationExecutor.java: 38) at org.springframework.remoting.support.RemoteInvocationBasedExporter.invoke(RemoteInvocationBasedExporter.java: 78) at org.springframework.remoting.rmi.RmiBasedExporter.invoke(RmiBasedExporter.java: 73) at org.springframework.remoting.rmi.RmiInvocationWrapper.invoke(RmiInvocationWrapper.java: 72) at sun.reflect.GeneratedMethodAccessor174.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 43) at java.lang.reflect.Method.invoke(Method.java: 606) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java: 322) at sun.rmi.transport.Transport$2.run(Transport.java: 202) at sun.rmi.transport.Transport$2.run(Transport.java: 199) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java: 198) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java: 567) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java: 828) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.access$400(TCPTransport.java: 619) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$1.run(TCPTransport.java: 684) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$1.run(TCPTransport.java: 681) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java: 681) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java: 1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java: 615) at java.lang.Thread.run(Thread.java: 745)
解决方案
MyBatis 在 3.3.1 版本开始支持批量插入时回写主键. 批量插入接口入参名称必须为 "collection" "list" "array" 之一. 集合参数不能使用 @Param 并且 接口只能有一个参数. 示例:
- int batchInsertModulars(List list);
- INSERT INTO `table name` ( ) VALUES (...)
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2017/02-17/17253302.html