当前使用版本(必填,否则不予处理)
3.3.2
该问题是如何引起的?(确定最新版也有问题再提!!!)
使用updateBatchById,集合为2197条数据,报错。
将2197条数据遍历使用updateById,则正常。 将日志调整为debug级,使用updateBatchById查看生成的sql,将sql直接在数据库运行也正常。
重现步骤(如果有就写完整)
报错信息
Cause: java.sql.BatchUpdateException: java.lang.NullPointerException
Comment From: lucheng
你这个我用3.3.2版本 也没复现
Comment From: miemieYaho
有复现demo?
Comment From: 112921482
大概定位到问题,并不是数量的问题。使用mysql数据库,表中有一个字段类型为date,对应entity的类型为LocalDate,如果该字段保存值,则报错,不保存的话updateBatchById不会保存,只有一条数据的时候也是如此,
Comment From: miemieYaho
那就是驱动问题,不支持jdbc4,mybatis底层全面升级为jdbc4了
Comment From: 112921482
那我现在要怎么解决呢?
Comment From: 112921482
问题是,我单独使用updateById不会报错,只有在使用updateBatchById才报错,这也是因为驱动问题吗?
Comment From: lucheng
本地也没复现,你把你的核心问题代码 发出来。 数据库是mysql吧, 字段date 属性是localdate 对吧
Comment From: 112921482
@Test
void batchUpdateTest1() {
List<PortalUser> portalUserList = portalUserService.list();
portalUserList.forEach(portalUser -> portalUser.setRealName(LocalDateTime.now().toString()));
portalUserService.updateBatchById(portalUserList);
}
@Test
void batchUpdateTest12() {
List<PortalUser> portalUserList = portalUserService.list();
portalUserList.forEach(portalUser -> {
portalUser.setRealName(LocalDateTime.now().toString());
portalUser.setBirthday(LocalDate.now());
});
portalUserService.updateBatchById(portalUserList);
}
两个测试,第一个测试不设置生日可以通过,第二个设置则报错,数据库mysql,版本5.7.30
Comment From: miemieYaho
驱动版本?
Comment From: 112921482
springboot项目,springboot版本:2.3.0,mysql版本:8.0.20
Comment From: miemieYaho
pom里和mybatis有关的都有啥?
Comment From: 112921482
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
Comment From: miemieYaho
去掉,只保留mp的
Comment From: 112921482
去掉了,还是报错
Comment From: miemieYaho
那你整个复现demo吧
Comment From: 112921482
Comment From: 112921482
我用这个demo可以成功复现,复现的代码在测试类中,使用的数据库是mysql5.7.30
Comment From: miemieYaho
没毛病啊
Comment From: 112921482
要不链我的测试库试试?我数据库就报错啊
Comment From: miemieYaho
data-source-properties:
cachePrepStmts: true
prepStmtCacheSize: 250
prepStmtCacheSqlLimit: 2048
useServerPrepStmts: true
useLocalSessionState: true
rewriteBatchedStatements: true
cacheResultSetMetadata: true
cacheServerConfiguration: true
elideSetAutoCommits: true
maintainTimeStats: false
你这一坨配置的问题.搞不懂啥意思就别乱配,over
Comment From: 112921482
你有没有跑data.sql里面先插入一条数据。。。。
Comment From: 112921482
这是hikari的推荐配置啊我的哥,你跑的时候数据库有数据吗?
Comment From: miemieYaho
看图片,里面有debug的sql
Comment From: 112921482
要不连我的数据库试试?为啥我连自己的就报错呢???
Comment From: 112921482
试了下,真是配置的问题。。。按照hikari配的。。。我再研究研究,谢谢了
Comment From: lucheng
这很尴尬...