文章目录
因为平时在写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 = ?)
之所以会出现这样的问题,有两个方面的原因(因为我自己遇到了这两个方面的错误):
- 因为在
DAO
实体类中某一个成员属性是这样定义的:private int userId;
,问题就在这里,int 类型的默认值为0,此处应该采用 Integer ,封装类,Integer的默认值为 null ,改为Integer后QueryMapper要搜索的其值就不是0了而是null,即对当前数据库中的表进行全查,而不是查0 - 因为我用到了逻辑删除,我自己将逻辑删除的注解
@TableLogic
放到了private Integer userId
,导致出现了这样的问题
参考文献
1、MyBatis添加数据报错Cannot add or update a child row: a foreign key constraint fails
2、Mybatis-Plus查询语句无故自动加条件