当前使用版本

使用的是'com.baomidou:mybatis-plus-boot-starter:3.3.1'

该问题是怎么引起的?**

调用ServiceImpl的saveBatch时出现的异常

重现步骤

gradle工程 implementation 'com.baomidou:mybatis-plus-boot-starter:3.3.1' implementation 'mysql:mysql-connector-java:8.0.19'

java bean的主键设置如下: @TableId(type = IdType.AUTO) @TableField(value = "id" ) private Long id;

DAO继承BaseMapper Service继承ServiceImpl,调用saveBatch(List)方法 出现异常:

com.microsoft.sqlserver.jdbc.SQLServerException: 必须执行该语句才能获得结果。
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:234) ~[mssql-jdbc-8.2.1.jre8.jar:na]
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getGeneratedKeys(SQLServerStatement.java:2216) ~[mssql-jdbc-8.2.1.jre8.jar:na]
    at com.zaxxer.hikari.pool.ProxyStatement.getGeneratedKeys(ProxyStatement.java:230) ~[HikariCP-3.4.2.jar:na]
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.getGeneratedKeys(HikariProxyPreparedStatement.java) ~[HikariCP-3.4.2.jar:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_91]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_91]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_91]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_91]
    at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:78) ~[mybatis-3.5.3.jar:3.5.3]
    at com.sun.proxy.$Proxy79.getGeneratedKeys(Unknown Source) ~[na:na]
    at org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator.processBatch(Jdbc3KeyGenerator.java:75) ~[mybatis-3.5.3.jar:3.5.3]
    at com.baomidou.mybatisplus.core.executor.MybatisBatchExecutor.doFlushStatements(MybatisBatchExecutor.java:139) ~[mybatis-plus-core-3.3.1.jar:3.3.1]
    at org.apache.ibatis.executor.BaseExecutor.flushStatements(BaseExecutor.java:129) ~[mybatis-3.5.3.jar:3.5.3]
    at org.apache.ibatis.executor.BaseExecutor.flushStatements(BaseExecutor.java:122) ~[mybatis-3.5.3.jar:3.5.3]
    at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.flushStatements(MybatisCachingExecutor.java:216) ~[mybatis-plus-core-3.3.1.jar:3.3.1]
    at org.apache.ibatis.session.defaults.DefaultSqlSession.flushStatements(DefaultSqlSession.java:252) ~[mybatis-3.5.3.jar:3.5.3]
    at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.lambda$executeBatch$3(ServiceImpl.java:258) ~[mybatis-plus-extension-3.3.1.jar:3.3.1]
    at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.executeBatch(ServiceImpl.java:222) ~[mybatis-plus-extension-3.3.1.jar:3.3.1]
    at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.executeBatch(ServiceImpl.java:252) ~[mybatis-plus-extension-3.3.1.jar:3.3.1]
    at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.saveBatch(ServiceImpl.java:127) ~[mybatis-plus-extension-3.3.1.jar:3.3.1]
    at com.baomidou.mybatisplus.extension.service.IService.saveBatch(IService.java:69) ~[mybatis-plus-extension-3.3.1.jar:3.3.1]
    at com.wuxinming.crud.auto.UserInfoService.fileImport(UserInfoService.java:23) ~[main/:na]
    at com.wuxinming.crud.auto.UserInfoService$$FastClassBySpringCGLIB$$7b5c2126.invoke(<generated>) ~[main/:na]
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:685) ~[spring-aop-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at com.wuxinming.crud.auto.UserInfoService$$EnhancerBySpringCGLIB$$f9347133.fileImport(<generated>) ~[main/:na]
    at com.wuxinming.crud.auto.UserInfoController.fileImport(UserInfoController.java:61) ~[main/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_91]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_91]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_91]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_91]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888) ~[spring-webmvc-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) ~[spring-webmvc-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.2.3.RELEASE.jar:5.2.3.RELEASE]

报错信息

Comment From: calmatery

mysql环境下正常,sqlserver单条插入也可以,saveBatch在sqlserver下不行

Comment From: miemieYaho

https://github.com/baomidou/mybatis-plus/issues/1629

Comment From: calmatery

1629

这个地址也没看到解决方案,是后面有版本计划吗?

Comment From: miemieYaho

sqlserver驱动不支持

Comment From: tangmingze7280

单条 save 能返回新增主键id吗

Comment From: Nymph2333

同样遇到这个问题了 头痛了