实体类字段名与数据库字段不一致导致『完整性约束违反异常』

在上一文中,我们谈到了 跨域问题所导致的携带Cookie问题。在本文中,我们要来谈谈有关 字段名的命名不一致所导致完整性约束违反异常IntegrityConstraintViolationException,这个问题在我观察下来很多是很多初学者都会犯的问题,故作次记录✍

一、异常描述

  • 首先我们来看一下到底出现了什么异常:当前端向后端发起请求准备发布发布文章的时候,此时后端服务器反馈的状态码是500,这代表【服务器内部错误】

然后来到后端这一块我们可以看到有一个异常是: 完整性约束违反异常IntegrityConstraintViolationException

  • 光看这个异常的话还无法确定是哪里出了问题,IDEA所给出的异常描述很具体,通过仔细地阅读我们可以发现问题所在应该是外键约束
  • 经过这个缘由我们来看数据表的定义中有关article_info文章表中外键约束的那一部分,它约束的便是user_info用户表中的用户uid

二、调试排查

那么这个问题就定位到了约束性上了,接下去我们再通过调试排查一下具体是哪块出了问题:mag:

  • 通过调试进入到/article/add 中后,当我们给文章设置用户的uid时,在调试台中发现usernamepassword虽然存在,但是用户的id却为0,正常来说当一个用户登入了之后自然会给其分配一个id,那这里为0的话自然是有问题的
  • 测试一下另一个用户进行登入然后发布文章也是出现了同样的问题

💬 此时我便开始思考,到底是什么的问题呢?

既然问题出在用户这一块上,那么我便去排查了【用户登录】这一块的接口

java 复制代码
// 2.通过username去数据库中查询相关的用户
UserInfo userInfo = userService.login(username);
if (userInfo.getUid() == 0){
    return AjaxResult.fail(-3, "用户uid读取错误");
}
  • 那当我排查到这里的时候,就发现用户在登录的时候就没有id了,所以到后面这个用户去进行其他任何的操作时都是不会有这个id

💬 那这个id为什么会为0呢?接下去就是最关键的一步了🔑

  • 经过我的思考,又联想了前面的『约束异常』 ,便 想到了在数据表中所定义的字段名为uid,但是实体类中的字段名给的是id,便将二者都改为一致为uid看看是否可行?

三、修改测试

那在修改之后我们便要去做一个测试了,看看这个uid是否会有值呢?

  • 那我们看到此时再去进行用户登录的时候看到是可以取到这个uid
  • 那么调试文章发布的时候我们便可以看到在当前的session中的取出当前用户的时候这个用户是存在,并且uid是和当前登录的用户是一致的

马上使用当前用户进行插入测试,发现记录被成功插入进去了!

💬 那问题就很明显了,就是出现这个【命名】上,其实有一个办法可以很好地避免这个问题,那就是取消这个外键约束,其实现在很多项目中都不会使用到这个外键约束了,而是更多的使用到违约束即两个表之前存在着相同的字段,但是不特别地去使用foreign key这个外键约束,不然会带来很多不必要的麻烦

四、总结与反思

最后我们来总结一下本文所遇到的这个异常:book:

  • 很明显这个异常的出现问题在于【经验不足】导致的,如果知道实体类字段名数据库字段的命名是需要一致的,那在定义类的时候就会更加注意了
  • 还有一点就是在于【外键约束】这个东西,如果不想带来不必要的麻烦,可以采取违约束

以上就是本文的所有内容,希望对您有所帮助:rose:

相关推荐
killerbasd1 小时前
牧苏苏传 我不装了 4/7
前端·javascript·vue.js
大家的林语冰3 小时前
《前端周刊》尤大开源 Vite+ 全家桶,前端工业革命启动;尤大爆料 Void 云服务新产品,Vite 进军全栈开发;ECMA 源码映射规范......
前端·javascript·vue.js
递归尽头是星辰4 小时前
Spring Boot 配置排除失效深度解析:时序与机制核心
spring boot·自动配置·bean 加载·exclude失效·组件扫描
M ? A4 小时前
Vue 迁移 React 实战:VuReact 一键自动化转换方案
前端·vue.js·经验分享·react.js·开源·自动化·vureact
Burt5 小时前
我的 2026 全栈选型:Vue3 + Elysia + Bun + AlovaJS
vue.js·全栈·bun
小锋java12345 小时前
SpringBoot 4 + Spring Security 7 + Vue3 前后端分离项目设计最佳实践
java·vue.js·spring boot
一 乐5 小时前
校园线上招聘|基于springboot + vue校园线上招聘系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·校园线上招聘系统
不懂的浪漫5 小时前
mqtt-plus 架构解析(四):MqttMessageInterceptor 的扩展点设计
java·spring boot·物联网·mqtt
LanceJiang5 小时前
从输入 URL 到页面:一个 Vue 项目的“奇幻漂流”
vue.js
码喽7号6 小时前
vue学习四:Axios网络请求
前端·vue.js·学习