Mybatis-Plus 批量插入数据时报错 java.lang.Object Not Found TableInfoCache

文章目录

  • 前言
  • 问题回溯
  • 排查过程
  • 总结

前言

报错堆栈信息如下,基本是mybatis-plus源码中的一些东西:

com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: java.lang.Object Not Found TableInfoCache.at com.baomidou.mybatisplus.core.toolkit.ExceptionUtils.mpe(ExceptionUtils.java:49)at com.baomidou.mybatisplus.core.toolkit.Assert.isTrue(Assert.java:38)at com.baomidou.mybatisplus.core.toolkit.Assert.notNull(Assert.java:72)at com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils.currentSessionFactory(GlobalConfigUtils.java:54)at com.baomidou.mybatisplus.extension.toolkit.SqlHelper.sqlSessionFactory(SqlHelper.java:71)at com.baomidou.mybatisplus.extension.toolkit.SqlHelper.executeBatch(SqlHelper.java:161)at com.baomidou.mybatisplus.extension.toolkit.SqlHelper.executeBatch(SqlHelper.java:207)at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.executeBatch(ServiceImpl.java:239)at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.saveBatch(ServiceImpl.java:135)at com.baomidou.mybatisplus.extension.service.IService.saveBatch(IService.java:73)

我这里的问题主要是,调用单个插入数据,是能插入成功的。调用批量时就会报错。

网上有些朋友说是因为实体定义,表名之类的问题。这个肯定不是我当前遇到的,否则单个插入数据也会报错。而且报错信息也会有所不同。

问题回溯

报错的地方是全局配置类中获取表信息的时候,取了个空:
在这里插入图片描述
可以看到此处的问题,传进来的clazz 居然成了 Object类型的。这就是问题的根本原因,压根没有一个表能对应上Object。

那么这个Object 是从哪来的呢?

排查过程

从堆栈信息入手,向前找,看看这个clazz 是谁传过来的。
终于,在源码中找到了。在mybatis-plus的service实现类中

com.baomidou.mybatisplus.extension.service.impl.ServiceImpl

批量方法:
在这里插入图片描述
再继续查找,这是当前实现类的属性值,应该是在对象初始化时,就赋值了。
在这里插入图片描述
这里是获取了父类的范型类型,看到这里,大概知道这个错误的原因了。就是这个类型,获取到的是Object类型,导致了后来的错误。

    public static Class<?> getSuperClassGenericType(final Class<?> clazz, final int index) {Type genType = clazz.getGenericSuperclass();if (!(genType instanceof ParameterizedType)) {logger.warn(String.format("Warn: %s's superclass not ParameterizedType", clazz.getSimpleName()));return Object.class;}Type[] params = ((ParameterizedType) genType).getActualTypeArguments();if (index >= params.length || index < 0) {logger.warn(String.format("Warn: Index: %s, Size of %s's Parameterized Type: %s .", index,clazz.getSimpleName(), params.length));return Object.class;}if (!(params[index] instanceof Class)) {logger.warn(String.format("Warn: %s not set the actual class on superclass generic parameter",clazz.getSimpleName()));return Object.class;}return (Class<?>) params[index];}

一般来说,我们在写业务层时,会这样写:

public class UserService extends ServiceImpl<UserMapper, User> {
...
}

然后使用这个UserService就没有这个问题。
但是我现在这个会出这个问题,是因为在继承关系中,多加了一层

我目前使用的类,可以说是又继承了 UserService,最关键的是UserService 并没有范型类型。因此直接返回了Object.class类型。

总结

在增加了继承关系的写法中,无法使用serviceImpl的一些方法。但是调用mapper的方法,是可以的。
在这里插入图片描述

这也就是为什么我的批量操作报错,单个插入却是可以成功的原因。

然后就是写这个层级结构时,可以将数据库相关的内容,全部写在 ServiceImpl 的直接子类中。其他地方再去调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/76750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

REST风格【SpringBoot】

1.REST简介 行为动作 通常模块名使用复数&#xff0c;也就是加s 2.RESTful入门 Controller public class UserController {RequestMapping(value "/users", method RequestMethod.POST)public String save() {System.out.println("user save");return &…

ClickHouse进阶(十二):Clickhouse数据字典-2-字典类型

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术,IT贫道_大数据OLAP体系技术栈,Apache Doris,Kerberos安全认证-CSDN博客 &#x1f4cc;订阅…

ChatGPT怎么运用在文学分析和文化研究中?

ChatGPT在文学分析和文化研究中具有巨大的潜力。它可以用于解析文学作品、探讨文学理论、分析文化现象以及协助研究者深入理解文学和文化的复杂性。在接下来的1500字中&#xff0c;我将详细回答如何运用ChatGPT在文学分析和文化研究中。 ### 第一部分&#xff1a;文学分析 文…

英码深元“三位一体”AI场景化解决方案,助力多地化工园区快速实现智慧化转型!

我国是世界公认的化工大国&#xff0c;同时也是崛起中的化工强国。近年来多起重大爆炸事故暴露出我国化工园区安全问题突出&#xff0c;特别是在安全风险管控数字化转型、智能化升级方面存在明显短板和不足&#xff0c;尤其突出的痛点&#xff1a;化工园区的日常管理方式较为粗…

SD固定人物角色的方法

文章目录 前言1.固定人物角色1.seed固定2.ControlNet固定3.lora固定角色 前言 本章主要介绍如何用SD绘制漫画 1.固定人物角色 1.seed固定 2.ControlNet固定 3.lora固定角色

电子烟行业常用的英文表达

1. 电子烟的各种表达 a) 电子烟 i. Electronic-cigarette, ii. Electronic smoke, iii. electronic cigarettes iv. Electric cigarette, v. E-Cigarettes vi. e-cigarette, vii. e-Cig viii. E cigar,e-cigar 电子烟雪茄 2. 电子烟特指词汇及衍生 a) VAPE i. Vapo…

【Git】Git 分支

Git 分支 1.分支简介 为了真正理解 Git 处理分支的方式&#xff0c;我们需要回顾一下 Git 是如何保存数据的。 或许你还记得 起步 的内容&#xff0c; Git 保存的不是文件的变化或者差异&#xff0c;而是一系列不同时刻的 快照 。 在进行提交操作时&#xff0c;Git 会保存一…

Scrum工作模式的角色和活动

​Scrum工作模式是一种敏捷软件开发方法&#xff0c;其核心是团队合作和自我组织&#xff0c;旨在通过短周期的迭代开发&#xff0c;实现快速反馈和持续改进。 Scrum工作模式包括以下角色和活动&#xff1a; 1、产品负责人&#xff08;Product Owner&#xff09;&#xff1a;…

Oracle(1):Oracle简介

1 什么是 ORACLE ORACLE 数据库系统是美国 ORACLE 公司&#xff08;甲骨文&#xff09;提供的以分布式数据库为核心的一组软件产品&#xff0c;是目前最流行的客户/服务器(CLIENT/SERVER)或B/S 体系结构的数据库之一。 ORACLE 通常应用于大型系统的数据库产品。 ORACLE 数据…

计算机网络篇之端口

计算机网络篇之端口 文章目录 计算机网络篇之端口前言概括分类总结 前言 我们知道ip地址可以确定向哪台主机转发数据&#xff0c;但是数据要发给主机的哪个进程&#xff0c;这个时候端口就派上用场了 概括 计算机网络端口是用于区分不同应用程序或网络服务的逻辑地址&#x…

ICC2: ICG clone与ICG merge

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 默认情况下,initial_place阶段或者在spg flow的initial_opt阶段工具会自动merge clock gating cell。但是如果在place_opt之前使用merge_clock_gates命令了,place阶段就不会再merge clock gate了。…

maven管理android项目

maven管理android项目 1.安装maven-android-sdk-deployer&#xff0c;下载地址&#xff1a;https://github.com/mosabua/maven-android-sdk-deployer 2.解压缩大英文路径文件夹 3.在压缩后的根目录执行mvn clean install -P 2.3.3&#xff08;2.3.3指的是android版本号&#x…

赋能人工智能:Kubeflow VMware Distribution的发布

在最近结束的 VMware Explore 2023 拉斯维加斯大会上&#xff0c;VMware 推出了新的 Private AI 产品&#xff0c;以促进企业采用生成式人工智能并挖掘可信数据的价值。VMware 宣布了以下几点&#xff1a; 与 NVIDIA 合作推出 VMware Private AI Foundation&#xff0c;将两家…

安装 paddlepaddle paddleocr库,避坑指南

看到这个库我就头疼&#xff0c;因为换了电脑&#xff0c;不得不再来一遍&#xff0c;又是到处踩坑&#xff01;拼了好几个小时&#xff0c;总结出来的最终解决方法&#xff01;详细的傻瓜式解决&#xff01; - import paddle 报错&#xff01;illegal hardware instruction py…

Linux 内核 6.5 发布,首次支持 Wi-Fi 7 和 USB4

导读Linux 6.5 内核 已经推出&#xff0c;此次更新在 Linux 6.4 内核的基础上进行了进一步的开发&#xff0c;带来了值得注意的改变和新特性。 Linus Torvalds 表示&#xff0c;这是一次相对顺畅的发布&#xff1a; 上周并没有发生任何异常或惊人的事情&#xff0c;因此没有理…

数据预处理之数据缩放

一、介绍 ​ 在实践中&#xff0c;同一个数据集合中经常包含不同类别的变量。一个很大的问题是这些变量的值域可能大不相同。如果使用原值域将会使得值域大的变量被赋予更多的权重。针对这个问题&#xff0c;我们需要在数据预处理时对自变量或特征使用缩放的方法。特征缩放的目…

【运维 Pro】时序场景实践与原理 - 1. 分布与分区

【运维 Pro】: 是由 YMatrix 售前和售后团队负责的栏目。除了介绍日常的数据库运维和使用知识&#xff0c;我们更希望能够通过介绍这些知识背后的原理&#xff0c;让大家和我们一起感知数据库的美妙。 摘要 有别于其它场景&#xff0c;时序场景中的数据、查询都有着更为明显的…

Scrum敏捷开发流程及敏捷研发关键环节

Scrum是一个迭代式增量软件开发过程&#xff0c;是敏捷方法论中的重要框架之一。它通常用于敏捷软件开发&#xff0c;包括了一系列实践和预定义角色的过程骨架。Scrum中的主要角色包括Scrum主管&#xff08;Scrum Master&#xff09;、产品负责人&#xff08;Product Owner&…

php+mysql实现补齐24小时时间段同时赋值0的后端解决方案

javascript对象数据合并实现补齐24小时时间段同时赋值0的解决方案(1)javascript对象数据合并实现补齐24小时时间段同时赋值0升级版解决方案(2) 项目需求 在php中使用mysql生成 arr [{"dataKey": "00","totalTrans": "4","tot…

坚果投影人事地震:IPO之前,创始人被投资人踢出公司

大数据产业创新服务媒体 ——聚焦数据 改变商业 一份流传于网络的《董事会函件》以及一张微信截图显示&#xff0c;智能投影行业市占率第二的坚果投影8月28日发生人事地震&#xff0c;公司创始人胡震宇被董事会罢免董事长一职&#xff0c;由资方代表连萌担任临时董事长一职。 …