在使用SpringBoot时遇到的异常总结(持续更新...)

news2024/12/23 8:39:31

文章目录

  • 异常
    • MyBatis
      • java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails
      • Mybatis-Plus查询语句无故自动加条件
      • Mybatis No enum constant org.apache.ibatis.type.JdbcType.TEXT
  • 参考文献

因为平时在写SpringBoot项目时,总是会遇到各种各样的异常,因此在这里记录一下,以便以后再遇到相同的错误时能够有一个参考

异常

MyBatis

java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails

时间:2023年09月18日

这个错误实际上并不是coding的问题,而是在向数据库中添加数据时出现的问题,更准确地说是外键约束的问题

  • squad表
    在这里插入图片描述
    在这里插入图片描述

  • member表
    在这里插入图片描述

可以看到member表中的字段group_id是一个外键(不考虑user_id这一字段)
但是我在向数据库member表中插入数据时,插入的内容是:
在这里插入图片描述
可以发现,向member表插入的数据中groupId=0,但是在squad表中并不存在id=0,所以出现上述异常
还有一个地方:为什么表的名字是squad而不是group/groups,因为group/groups都是mysql的关键字,具体请参考这篇文章:记录使用mybatis-plus时遇到的错误

Mybatis-Plus查询语句无故自动加条件

2023年09月18日

正常的查询语句:
在这里插入图片描述
在这里,查询语句是:

 SELECT COUNT(*) AS total FROM stakeholder WHERE deleted = 0 AND (user id = ?)

但是,这次遇到的问题是出现了错误的查询语句,导致没有办法进行正常的查询:
在这里插入图片描述
出现了错误的查询语句:

SELECT COUNT(*) AS total FROM stakeholder WHERE user_id = 0 AND (user_id = ?)

之所以会出现这样的问题,有两个方面的原因(因为我自己遇到了这两个方面的错误):

  1. 因为在DAO实体类中某一个成员属性是这样定义的:private int userId;,问题就在这里,int 类型的默认值为0,此处应该采用 Integer ,封装类,Integer的默认值为 null ,改为Integer后QueryMapper要搜索的其值就不是0了而是null,即对当前数据库中的表进行全查,而不是查0
  2. 因为我用到了逻辑删除,我自己将逻辑删除的注解@TableLogic放到了private Integer userId,导致出现了这样的问题

Mybatis No enum constant org.apache.ibatis.type.JdbcType.TEXT

2023年9月22日

在这里插入图片描述

当时我在mybatis的xml配置文件中,将jdbcType设置为和数据库保持一致的text类型,结果抛出了上述异常,JDBCType这个枚举类中不存在Text这个类型,那么我们需要查看一下JDBCType的源码:

public enum JDBCType implements SQLType {

    /**
     * Identifies the generic SQL type {@code BIT}.
     */
    BIT(Types.BIT),
    /**
     * Identifies the generic SQL type {@code TINYINT}.
     */
    TINYINT(Types.TINYINT),
    /**
     * Identifies the generic SQL type {@code SMALLINT}.
     */
    SMALLINT(Types.SMALLINT),
    /**
     * Identifies the generic SQL type {@code INTEGER}.
     */
    INTEGER(Types.INTEGER),
    /**
     * Identifies the generic SQL type {@code BIGINT}.
     */
    BIGINT(Types.BIGINT),
    /**
     * Identifies the generic SQL type {@code FLOAT}.
     */
    FLOAT(Types.FLOAT),
    /**
     * Identifies the generic SQL type {@code REAL}.
     */
    REAL(Types.REAL),
    /**
     * Identifies the generic SQL type {@code DOUBLE}.
     */
    DOUBLE(Types.DOUBLE),
    /**
     * Identifies the generic SQL type {@code NUMERIC}.
     */
    NUMERIC(Types.NUMERIC),
    /**
     * Identifies the generic SQL type {@code DECIMAL}.
     */
    DECIMAL(Types.DECIMAL),
    /**
     * Identifies the generic SQL type {@code CHAR}.
     */
    CHAR(Types.CHAR),
    /**
     * Identifies the generic SQL type {@code VARCHAR}.
     */
    VARCHAR(Types.VARCHAR),
    /**
     * Identifies the generic SQL type {@code LONGVARCHAR}.
     */
    LONGVARCHAR(Types.LONGVARCHAR),
    /**
     * Identifies the generic SQL type {@code DATE}.
     */
    DATE(Types.DATE),
    /**
     * Identifies the generic SQL type {@code TIME}.
     */
    TIME(Types.TIME),
    /**
     * Identifies the generic SQL type {@code TIMESTAMP}.
     */
    TIMESTAMP(Types.TIMESTAMP),
    /**
     * Identifies the generic SQL type {@code BINARY}.
     */
    BINARY(Types.BINARY),
    /**
     * Identifies the generic SQL type {@code VARBINARY}.
     */
    VARBINARY(Types.VARBINARY),
    /**
     * Identifies the generic SQL type {@code LONGVARBINARY}.
     */
    LONGVARBINARY(Types.LONGVARBINARY),
    /**
     * Identifies the generic SQL value {@code NULL}.
     */
    NULL(Types.NULL),
    /**
     * Indicates that the SQL type
     * is database-specific and gets mapped to a Java object that can be
     * accessed via the methods getObject and setObject.
     */
    OTHER(Types.OTHER),
    /**
     * Indicates that the SQL type
     * is database-specific and gets mapped to a Java object that can be
     * accessed via the methods getObject and setObject.
     */
    JAVA_OBJECT(Types.JAVA_OBJECT),
    /**
     * Identifies the generic SQL type {@code DISTINCT}.
     */
    DISTINCT(Types.DISTINCT),
    /**
     * Identifies the generic SQL type {@code STRUCT}.
     */
    STRUCT(Types.STRUCT),
    /**
     * Identifies the generic SQL type {@code ARRAY}.
     */
    ARRAY(Types.ARRAY),
    /**
     * Identifies the generic SQL type {@code BLOB}.
     */
    BLOB(Types.BLOB),
    /**
     * Identifies the generic SQL type {@code CLOB}.
     */
    CLOB(Types.CLOB),
    /**
     * Identifies the generic SQL type {@code REF}.
     */
    REF(Types.REF),
    /**
     * Identifies the generic SQL type {@code DATALINK}.
     */
    DATALINK(Types.DATALINK),
    /**
     * Identifies the generic SQL type {@code BOOLEAN}.
     */
    BOOLEAN(Types.BOOLEAN),

    /* JDBC 4.0 Types */

    /**
     * Identifies the SQL type {@code ROWID}.
     */
    ROWID(Types.ROWID),
    /**
     * Identifies the generic SQL type {@code NCHAR}.
     */
    NCHAR(Types.NCHAR),
    /**
     * Identifies the generic SQL type {@code NVARCHAR}.
     */
    NVARCHAR(Types.NVARCHAR),
    /**
     * Identifies the generic SQL type {@code LONGNVARCHAR}.
     */
    LONGNVARCHAR(Types.LONGNVARCHAR),
    /**
     * Identifies the generic SQL type {@code NCLOB}.
     */
    NCLOB(Types.NCLOB),
    /**
     * Identifies the generic SQL type {@code SQLXML}.
     */
    SQLXML(Types.SQLXML),

    /* JDBC 4.2 Types */

    /**
     * Identifies the generic SQL type {@code REF_CURSOR}.
     */
    REF_CURSOR(Types.REF_CURSOR),

    /**
     * Identifies the generic SQL type {@code TIME_WITH_TIMEZONE}.
     */
    TIME_WITH_TIMEZONE(Types.TIME_WITH_TIMEZONE),

    /**
     * Identifies the generic SQL type {@code TIMESTAMP_WITH_TIMEZONE}.
     */
    TIMESTAMP_WITH_TIMEZONE(Types.TIMESTAMP_WITH_TIMEZONE);

    /**
     * The Integer value for the JDBCType.  It maps to a value in
     * {@code Types.java}
     */
    private Integer type;

    /**
     * Constructor to specify the data type value from {@code Types) for
     * this data type.
     * @param type The value from {@code Types) for this data type
     */
    JDBCType(final Integer type) {
        this.type = type;
    }

    /**
     *{@inheritDoc }
     * @return The name of this {@code SQLType}.
     */
    public String getName() {
        return name();
    }
    /**
     * Returns the name of the vendor that supports this data type.
     * @return  The name of the vendor for this data type which is
     * {@literal java.sql} for JDBCType.
     */
    public String getVendor() {
        return "java.sql";
    }

    /**
     * Returns the vendor specific type number for the data type.
     * @return  An Integer representing the data type. For {@code JDBCType},
     * the value will be the same value as in {@code Types} for the data type.
     */
    public Integer getVendorTypeNumber() {
        return type;
    }
    /**
     * Returns the {@code JDBCType} that corresponds to the specified
     * {@code Types} value
     * @param type {@code Types} value
     * @return The {@code JDBCType} constant
     * @throws IllegalArgumentException if this enum type has no constant with
     * the specified {@code Types} value
     * @see Types
     */
    public static JDBCType valueOf(int type) {
        for( JDBCType sqlType : JDBCType.class.getEnumConstants()) {
            if(type == sqlType.type)
                return sqlType;
        }
        throw new IllegalArgumentException("Type:" + type + " is not a valid "
                + "Types.java value.");
    }
}

因此我们需要在\<result property="" column="" jdbcType="VARCHAR"/>中将jdbcType设置为VARCHAR与数据库中Text类型数据进行映射

参考文献

1、MyBatis添加数据报错Cannot add or update a child row: a foreign key constraint fails
2、Mybatis-Plus查询语句无故自动加条件

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

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

相关文章

pandas使用---Series/DataFrame

借鉴 Pandas 常用函数 | 菜鸟教程Pandas 常用函数 以下列出了 Pandas 常用的一些函数及使用实例&#xff1a; 读取数据 函数说明 pd.read_csv(filename)读取 CSV 文件&#xff1b; pd.read_excel(filename)读取 Excel 文件&#xff1b; pd.read_sql(query, connection_object)…

ElasticSearch从入门到精通(二)

ElasticSearch 高级操作 bulk批量操作 批量操作-脚本 #批量操作 #1.删除5号 #新增8号 #更新2号 name为2号 POST _bulk {"delete":{"_index":"person1","_id":"5"}} {"create":{"_index":"person…

jvm深入研究文档--程序执行专业户-虚拟机栈--jvm底层探索(2)

阿丹&#xff1a; JVM的内存分区包括以下几个部分&#xff1a; 堆区&#xff08;Heap&#xff09; - 这是JVM的主要部分&#xff0c;用于存储实例对象和大多数Java对象&#xff0c;如数组和用户定义的类。 方法区&#xff08;Method Area&#xff09; - 这是线程私有的&#x…

前端项目练习(练习-004-webpack-02)

学习前&#xff0c;首先&#xff0c;创建一个web-004项目&#xff0c;内容和web-003一样。&#xff08;注意将package.json中的name改为web-004&#xff09; 前面的例子&#xff0c;成功将js文件打包到了dist中&#xff0c;但是我们有三个文件&#xff0c;css&#xff0c;js和h…

微信公众号开发(BUG集)

1.微信公众平台接口错误:不合法的自定义菜单使用用户 地址&#xff1a;解决地址 2.微信公众平台接口错误:invalid ip 180.101.72.196 ipv6 ::ffff:180.101.72.196, not in whitelist rid: 6511420b-60c59249-01084d02 白名单离开放服务器IP

第六章 Scala if..else与循环

1 IF…ELSE 语句 Scala IF…ELSE 语句是通过一条或多条语句的执行结果&#xff08;True或者False&#xff09;来决定执行的代码块。 1.1 if 语句 if 语句有布尔表达式及之后的语句块组成。 if(布尔表达式) {// 如果布尔表达式为 true 则执行该语句块 }如果布尔表达式为 tru…

BUUCTF SimpleRev

题目&#xff1a;BUUCTF SimpleRev 查壳&#xff0c;没壳&#xff0c;64位 ida打开一通分析 main(): while ( 1 ){while ( 1 ){printf("Welcome to CTF game!\nPlease input d/D to start or input q/Q to quit this program: ");v4 getchar();if ( v4 ! 100 &…

Marvell/Cisco/Broadcom 三巨头的51.2T交换芯片

最近在恶补Freya产品100/200/400/800GE AN/LT端口自适应和链路学习的知识&#xff0c;主要用在基于56Gb/s 的400G&#xff0c;112GGb/s的800G&#xff0c;和1.6Tbps高速接口上&#xff0c;当其使用DAC/AEC/ACC cable时&#xff0c;如果实现端口性能的自动调整。好奇的去拓展了下…

浅谈低压电力电容器常见故障分析及预防措施

安科瑞 华楠 【摘要】为了可以有效实现提高电力电容器故障解决效率&#xff0c;就需要针对其故障诊断技术展开研究&#xff0c;而状态量监测作为提高故障诊断技术效率与质量重要因素&#xff0c;其对电力电容器故障诊断工作而言&#xff0c;有着重要影响意义。基于此&#xff…

多来客推出新版短视频矩阵系统,携手灰豚AI大模型引领行业革新。

9月20日&#xff0c;本地生活行业代表多来客本地生活服务saas系统又上线新版短视频矩阵群控功能&#xff0c;并引入灰豚ai大模型,为商家全面解决了矩阵群控营销的痛点。该系统为本地生活服务商业内首创。 短视频矩阵群控系统 多来客上线于2022年3月份,是国内著名的短视频平台本…

SpringBoot 学习(十)分布式理论

12. 分布式理论 12.1 简介 分布式系统是若干独立计算机的集合&#xff0c;这些计算机对于用户来说就像单个相关系统。 分布式是一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统&#xff0c;其目的是利用更多的机器&#xff0c;处理更多的数据。 …

Vieworks首款采用CoF接口的工业相机亮相!

Vieworks首款CoF(CoaXPress-over-Fiber&#xff09;接口数字相机&#xff0c;具有高速度、高分辨率。 VC-21MDF-M/C460I在2100万全分辨率下可达到454fps的速率。CoF这个新接口支持传输高达80 Gbps的图像数据&#xff0c;加之配备Vieworks的创新技术&#xff0c;该相机不仅帧速…

钻孔主轴铝铸件微小孔φ2mm钻孔加工方案

随着工业技术的不断发展&#xff0c;铝铸件在现代制造业中发挥着越来越重要的作用。而在铝铸件的制造过程中&#xff0c;微小孔加工一直是一个重要而又具有挑战性的工艺。在这个过程中&#xff0c;钻孔主轴作为一种重要的工具&#xff0c;可以有效地完成铝铸件微小孔的加工。 …

[C++随笔录] list使用

list使用 构造函数insert && 迭代器push_back && pop_back && push_front && pop_fronterasesort && find && reverse list的底层结构就是 带头双向循环链表 构造函数 // 默认构造 list<int> lt; cout << "l…

PyQt5 自定义开关按钮(2)

效果展示 代码展示 from PyQt5.QtCore import Qt, pyqtSignal, QTimer, QRectF, QRect from PyQt5.QtGui import QFont, QColor, QPainter, QPainterPath from PyQt5.QtWidgets import QWidgetclass SwitchBtn(QWidget):clicked = pyqtSignal(bool)# 组件常量BORDER_WIDTH = 4…

【LeetCode-简单题】501. 二叉搜索树中的众数

文章目录 题目方法一&#xff1a;暴力哈希方法二&#xff1a;利用二叉搜索树的特性&#xff08;递归双指针&#xff09; 题目 方法一&#xff1a;暴力哈希 这是针对于普通二叉树的解法 统计number出现次数 然后将次数最大的众数集 取出来 Map<Integer , Integer > map …

世界前沿技术发展报告2023《世界信息技术发展报告》(五)先进计算技术

&#xff08;五&#xff09;先进计算技术 1. 概述2. 超级计算机2.1 美国首台E级超级计算机Crusher上线试运行2.2 欧洲最强大的超级计算机落成2.3 美国英伟达与微软公司联合开发人工智能超级计算机 3. 新型计算技术3.1 中国北京航空航天大学提出“混合概率逻辑计算”机制3.2 奥地…

港联证券:绿柱成交量放大什么意思?

这是许多股民常常遇到的问题。股票的价格涨跌往往与它的成交量有着紧密的联络&#xff0c;而绿柱扩展也意味着股票的成交量在上升&#xff0c;这或许是功德&#xff0c;也或许是坏事。本文将从不同角度评论绿柱成交量扩展的意义。 首要&#xff0c;关于绿柱扩展的情况&#xf…

负载均衡器监控

什么是负载均衡器 负载均衡建立在现有网络结构之上&#xff0c;它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。其意思就是分摊到多个操作单元上进行执行&#xff0c;例如Web服务器、FTP服务器、企…

MySQL数据库入门到精通7--进阶篇( InnoDB引擎)

6. InnoDB引擎 6.1 逻辑存储结构 InnoDB的逻辑存储结构如下图所示: 1). 表空间 表空间是InnoDB存储引擎逻辑结构的最高层&#xff0c; 如果用户启用了参数 innodb_file_per_table(在 8.0版本中默认开启) &#xff0c;则每张表都会有一个表空间&#xff08;xxx.ibd&#xff0…