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


因为平时在写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,导致出现了这样的问题

参考文献

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