当前位置: 首页 > news >正文

【异常】因多租户字段缺少导致Error updating database. Column ‘tenant_id‘ cannot be null

一、报错内容

org.springframework.dao.DataIntegrityViolationException: 
### Error updating database.  Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'tenant_id' cannot be null
### The error may exist in com/xxx/cloud/mall/admin/mapper/GoodsCategoryMapper.java (best guess)
### The error may involve com.xxx.cloud.mall.admin.mapper.GoodsCategoryMapper.insert-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO goods_category (id, enable, parent_id, name, description, sort, create_time, del_flag, tenant_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, NULL)
### Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'tenant_id' cannot be null
; Column 'tenant_id' cannot be null; nested exception is java.sql.SQLIntegrityConstraintViolationException: Column 'tenant_id' cannot be null

二、报错说明

Cause: java.sql.SQLIntegrityConstraintViolationException: Column ‘tenant_id’ cannot be null;

报错很明显,就是因为在插入数据表 记录时候,租户字段空了,所以导致了插入失败报错。

INSERT INTO goods_category (id,ENABLE,parent_id,NAMEdescription,sort,create_time,del_flag,tenant_id
)
VALUES(?, ?, ?, ?, ?, ?, ?, ?, NULL)

2.1 为什么本地测试是成功的?

那?为什么本地测试是成功的?发沙箱了就不行了?
因为本机直接跳过了租户的判断,直接到从Gateway转到了Mall-admin
但是沙箱就不行,必需要加上租户字段,才能发起请求。

2.2 能不加租户字段吗?

查看nacos中的配置,发现,我们定义了租户表维护,
其中,刚好操作的这张表(goods_category)是一定要加租户信息的,不然就会报错

base:# 租户表维护tenant:column: tenant_idtables:- goods_category

三、报错解决

3.1 【错误尝试】是不是请求Header要加租户字段?

因为是mall-admin,是有页面的,直接发起页面请求之后,Chrome浏览器,点击键盘F12,呼出Chrome的控制台,可以获取到Header中的Token字段(Authorization)+租户字段(switch-tenant-id)
在这里插入图片描述
因此,可以直接拷贝到ApiFox中,再次进行接口调用,我还以为解决了,结果问题依旧!
在这里插入图片描述
继续排查!

3.2 【正确解决】是不是持久化时,要加tenant_id字段?

认真看一下报错,问题处在GoodsCategoryMapper上,那就在代码前后,往上追溯代码逻辑

The error may exist in com/xxx/cloud/mall/admin/mapper/GoodsCategoryMapper.java

private final JDConfigProperties jDConfigProperties;@Override
public void saveGoodsCategoryShop(GoodsCategoryImportDTO goodsCategoryImportDTO) {JSONArray goodsCategoryJsonArray = getJSONArray(goodsCategoryImportDTO);for (int i = 0; i < goodsCategoryJsonArray.size(); i++) {// 设置租户IDTenantContextHolder.setTenantId(jDConfigProperties.getTenantId());List<GoodsCategoryShop> goodsCategoryShopList = baseMapper.selectList(Wrappers.<GoodsCategoryShop>lambdaQuery().eq(GoodsCategoryShop::getId, JSONUtil.parseObj(goodsCategoryJsonArray.get(i)).getStr("id")));//重复类目数据的过滤if (ObjectUtil.isNotEmpty(goodsCategoryShopList)) {log.info("重复店铺类目数据:levelOneCategoryId = [{}],导入失败,店铺类目数据记录已经存在", goodsCategoryImportDTO.getLevelOneCategoryId());continue;}GoodsCategoryShop goodsCategoryShop = new GoodsCategoryShop();goodsCategoryShop.setId(JSONUtil.parseObj(goodsCategoryJsonArray.get(i)).getStr("id"));goodsCategoryShop.setName(JSONUtil.parseObj(goodsCategoryJsonArray.get(i)).getStr("name"));goodsCategoryShop.setParentId(JSONUtil.parseObj(goodsCategoryJsonArray.get(i)).getStr("parentId"));int sortSize = getSort(GOODS_CATEGORY_SHOP_JD_KEY);goodsCategoryShop.setSort(sortSize);addSize(GOODS_CATEGORY_SHOP_JD_KEY);goodsCategoryShop.setShopId(jDConfigProperties.getShopId());goodsCategoryShop.setTenantId(jDConfigProperties.getTenantId());goodsCategoryShop.setEnable(CommonConstants.YES);goodsCategoryShop.setCreateTime(LocalDateTime.now());goodsCategoryShop.setDelFlag(DelFlagEnum.SHOW.getValue());goodsCategoryShop.setDescription(ProductChannelEnum.JINGDONG.getDesc());baseMapper.insert(goodsCategoryShop);}
}

看到下面这一句,其实有给租户字段赋值的,那为啥还会null呢?
goodsCategoryShop.setTenantId(jDConfigProperties.getTenantId());

那就肯定是jDConfigProperties.getTenantId()有问题了

好吧,直接说结论,Nacos中,没有配置相应的租户字段呗,

加上租户字段后, 问题解决!

四、参考文章

【项目实战】商城中基于MybatisPlus多租户功能逻辑设计

【异常】因为忘加了租户查询条件,导致重复ID导入失败Duplicate entry ‘XXX‘ for key ‘PRIMARY‘

【异常】因多租户字段缺少导致Error updating database. Column ‘tenant_id‘ cannot be null

相关文章:

【异常】因多租户字段缺少导致Error updating database. Column ‘tenant_id‘ cannot be null

一、报错内容 org.springframework.dao.DataIntegrityViolationException: ### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Column tenant_id cannot be null ### The error may exist in com/xxx/cloud/mall/admin/mapper/Goods…...

类和对象(上)

文章目录 面向对象的初步认知类的实例化this引用对象的构造及初始化封装static成员代码块内部类 对象的打印一、面向对象的初步认知 Java是一门纯面向对象的语言(Object Oriented Program&#xff0c;简称OOP)&#xff0c;在面向对象的世界里&#xff0c;一切皆为对象。在java中…...

Java经典面试题——谈谈 Java 反射机制,动态代理是基于什么原理?

典型回答 反射机制是 Java 语言提供的一种基本功能&#xff0c;赋予程序在运行时 自省&#xff08;introspect&#xff0c;官方用语&#xff09;的能力。通过反射我们可以直接操作类或者对象&#xff0c;比如获取某个对象的类定义&#xff0c;获取类声明的属性和方法&#xff…...

19 客户端服务订阅机制的核心流程

Nacos客户端服务订阅机制的核心流程 说起Nacos的服务订阅机制&#xff0c;大家会觉得比较难理解&#xff0c;那我们就来详细分析一下&#xff0c;那我们先从Nacos订阅的概述说起 Nacos订阅概述 Nacos的订阅机制&#xff0c;如果用一句话来描述就是&#xff1a;Nacos客户端通…...

教师论文|科技专著管理系统

技术&#xff1a;Java、JSP等摘要&#xff1a;随着计算机和互联网技术的发展&#xff0c;社会的信息化程度越来越高&#xff0c;各行各业只有适应这种发展趋势&#xff0c;才能增强自己的适应能力和竞争能力&#xff0c;不断发展壮大。大学作为教育的基地&#xff0c;是社会进步…...

骨传导耳机是什么意思,骨传导耳机的好处具体有哪些

​在这个全民都是手机的时代&#xff0c;各种蓝牙耳机&#xff0c;入耳式耳机&#xff0c;真无线耳机等各种款式琳琅满目。而骨传导耳机是一种全新的科技产物&#xff0c;顾名思义就是通过头骨振动将声音传至外耳内的耳机。由于无需入耳&#xff0c;不会对耳朵造成任何影响。那…...

elasticsearch—使用汇总

文档结构1、概念简介2、使用创景3、核心组件4、环境部署5、操作实践官方网站&#xff1a;https://www.elastic.co/cn/elasticsearch/ 官方手册&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/8.6/getting-started.html 参考教程&#xff1a; A&#xff…...

聊一聊代码重构——我们为什么要代码重构

代码重构 事情的起因是在去年下半年&#xff0c;我们终于无法承受往年的历史包袱而决定开始进行代码重构。 在以前我们尝试过进行代码重构但是从来没有系统性的考虑过如何重构。在对代码重构的过程中很多经验都是来自《重构&#xff1a;改善既有代码的设计》这本书&#xff0c;…...

【Python学习笔记】第二十九节 Python2 和Python3发生了哪些变化

Python 版本分为两大流派&#xff0c;一个是 Python 2.x 版本&#xff0c;另外一个是 Python 3.x 版本&#xff0c;Python 官方同时提供了对这两个版本的支持和维护。2020 年 1 月 1 日&#xff0c;Python 官方终止了对 Python 2.7 版本&#xff08;最后一个 Python 2.x 版本&a…...

[oeasy]python0099_雅达利大崩溃_IBM的开放架构_兼容机_oem

雅达利大崩溃 回忆上次内容 个人计算机浪潮已经来临 苹果公司迅速发展微软公司脱离mits准备做纯软件公司IBM用大型机思路制作的5100惨败 Commodore 64 既做计算机又做游戏机 计算机行业和游戏行业 跟随着底层技术不断迭代已经进入了战乱纷纷的年代最终又会如何呢&#xff1f…...

学术论文投稿之同行评审过程中可能会遭遇哪些偏见?

同行评审过程的顺利进行&#xff0c;在很大程度上取决于学术界的积极参与和相互信任&#xff0c;以及需要参与各方都以负责任的态度行事。作为审稿专家&#xff0c;向作者提供公正、客观的评价是至关重要的。同行评审过程中&#xff0c;若有任何偏离客观性的行为&#xff0c;均…...

Python写一个自动发送直播弹幕的工具,非常简单

哈喽大家好&#xff0c;今天给大家用Python整一个可以在直播间自动发弹幕的工具&#xff0c;来为喜欢的主播疯狂扣6 &#xff01; 事情原由昨晚回家&#xff0c;表弟在看LOL直播&#xff0c;看得我气不打一处来&#xff0c;差点就想锤他。 身为程序员的表弟&#xff0c;看直…...

学生档案管理系统的设计与实现

技术&#xff1a;Java、JSP等摘要&#xff1a;本设计是为托普学院学生档案的管理实现电子化而设计的&#xff0c;系统开发采用J2EE技术&#xff0c;数据库采用了SQL Server 2005&#xff0c;因而系统具有很好的扩展性、可移植性&#xff0c;实现了教学资源的信息化管理。主要功…...

JavaEE学习笔记-SpringBoot快速上手、部分注解解释

SpringBoot快速上手 一、快速创建SpringBoot应用1.1利用IDEA提供的Spring Initializr创建Spring Boot应用1.2Spring Boot生成的项目结构介绍1.3初步测试后端是否OK(建立一个controll类)二、热部署2.1 添加依赖2.2 Setting处项目自动化设置2.3 具体项目设置2.4 待选步骤三、注…...

【Python学习笔记】第二十六节 Python PyMySQL

一、什么是 PyMySQL&#xff1f;PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库。可以用它来连接Python和MySQL。如果你追求速度&#xff0c;这是一个很好的选择&#xff0c;因为它比mysql-connector-python快。PyMySQL 遵循 Python 数据库 API v2.0 规范&#x…...

Android问题笔记 -关于Kotlin插件版本的问题

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断…...

【同步工具类:Phaser】

同步工具类:Phaser介绍特性动态调整线程个数层次Phaser源码分析state 变量解析构造函数对state变量赋值阻塞方法arrive()awaitAdvance()业务场景实现CountDownLatch功能代码测试结果实现 CyclicBarrier功能代码展示测试结果总结介绍 一个可重复使用的同步屏障&#xff0c;功能…...

Linux命令·rmdir

今天学习一下linux中命令&#xff1a; rmdir命令。rmdir是常用的命令&#xff0c;该命令的功能是删除空目录&#xff0c;一个目录被删除之前必须是空的。&#xff08;注意&#xff0c;rm - r dir命令可代替rmdir&#xff0c;但是有很大危险性。&#xff09;删除某目录时也必须具…...

从0开始自制解释器——综述

作为一个程序员&#xff0c;自制自己的编译器一直是一个梦想。之前也曾为了这个梦想学习过类似龙书、虎书这种大部头的书&#xff0c;但是光看理论总有一些云里雾里的感觉。看完只觉得脑袋昏昏沉沉并没有觉得有多少长进。当初看过《疯狂的程序员》这本书&#xff0c;书里说&…...

【spring】spring5特性

1、整个 Spring5 框架的代码基于 Java8&#xff0c;运行时兼容 JDK9&#xff0c;许多不建议使用的类和方 法在代码库中删除 日志框架 2、Spring 5.0 框架自带了通用的日志封装 &#xff08;1&#xff09;Spring5 已经移除 Log4jConfigListener&#xff0c;官方建议使用 Log4j…...

使用 Taotoken 聚合 API 一周后的延迟与稳定性实际体验分享

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用 Taotoken 聚合 API 一周后的延迟与稳定性实际体验分享 1. 项目背景与接入动机 最近在开发一个需要调用多种大语言模型的个人…...

macOS桌面歌词神器LyricsX:免费开源歌词同步工具完整指南

macOS桌面歌词神器LyricsX&#xff1a;免费开源歌词同步工具完整指南 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics LyricsX是一款专为macOS设计的开源桌面歌词显示工具…...

Flutter For Openharmony第三方库: animated_text_kit 的鸿蒙化适配指南

Flutter 三方库 animated_text_kit 的鸿蒙化适配指南 欢迎加入开源鸿蒙跨平台社区&#xff1a;https://openharmonycrossplatform.csdn.net 前言&#xff1a;文字是可动的 嘿~亲爱的开发者小伙伴们&#xff0c;大家好呀&#xff01;&#x1f44b; 今天我们要一起探索一个超级有…...

2篇3章3节:Trae 的高效小说创作与文件管理实操

在人工智能辅助小说创作的过程中,工具操作方式、内容生成逻辑与文件管理体系,直接决定写作效率与文稿质量。Trae作为适配小说创作的专业工具,不仅支持单章、全章智能化生成正文内容,适配短篇、长篇不同创作场景,还具备多屏拆分、标签页管理、规范化文件收纳等实用功能。熟…...

新手入门教程使用curl命令直连Taotoken测试大模型聊天补全接口

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 新手入门教程&#xff1a;使用curl命令直连Taotoken测试大模型聊天补全接口 本文面向刚接触API调用的开发者&#xff0c;旨在指导如…...

YOLO26改进| downsample |网络深层多分支互补鲁棒下采样模块

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 本文给大家带来的教程是将YOLO26的下采样替换为DRFD来提取特征。文章在介绍主要的原理后&#xff0c;将手把手教学如何进行模块的代码添加和修…...

macOS虚拟机解锁终极指南:在普通PC上运行苹果系统的完整解决方案

macOS虚拟机解锁终极指南&#xff1a;在普通PC上运行苹果系统的完整解决方案 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unlo/unlocker 想要在Windows或Linux电脑上体验macOS系统&#xff0c;但又不想花费高昂的价…...

Windows下Python包管理权限踩坑实录:从WinError 5到WinError 32的完整解决流程

Windows下Python包管理权限问题深度解析&#xff1a;从WinError 5到WinError 32的实战指南 作为一名长期在Windows平台进行Python开发的工程师&#xff0c;我深刻理解文件权限问题带来的困扰。特别是当你在紧急项目交付前夜&#xff0c;突然遭遇PermissionError: [WinError 5]或…...

自然语言编写嵌入式软件之点亮LED灯

要实现的功能&#xff1a; 控制LED以10HZ的频率闪烁 传统实现过程&#xff1a;学C语言&#xff0c;看数据手册了解MCU&#xff0c;学教程&#xff0c;copy代码&#xff0c;学编译调试环境&#xff0c;学仿真&#xff0c;学用仪器测量 自然语言编程实现过程&#xff1a; 搭建…...

开源项目remote2mac:用Windows远程桌面无缝控制macOS

1. 项目概述&#xff1a;远程桌面连接的另一条路如果你是一名需要在Windows电脑上远程控制macOS设备的开发者、设计师或者运维人员&#xff0c;那么“远程桌面”这个需求对你来说一定不陌生。传统的方案&#xff0c;比如微软的RDP&#xff08;远程桌面协议&#xff09;对Window…...