Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry ‘‘six‘ for key ‘user_login

本文讲述了在SpringBoot应用中遇到的数据库重复数据插入异常问题,由于Unique约束导致的DuplicateKeyException。作者在排查过程中发现注册功能代码执行了两次,原因是返回login页面时URL带有请求参数,导致数据再次插入。最终通过使用redirect:/login解决重定向问题,避免了数据重复。
摘要由CSDN通过智能技术生成

2021-08-15 20:14:27.416 ERROR 16576 --- [nio-8080-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DuplicateKeyException: 
### Error updating database.  Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry 'six' for key 'user_loginName_uindex'
### The error may exist in file [E:\shop\target\classes\mybatis\mapper\UserMapper.xml]
### The error may involve com.hu.shop.mapper.UserMapper.save-Inline
### The error occurred while setting parameters
### SQL: insert into user(loginName,userName,password,gender,identityCode,email,mobile) values(?,?,?,?,?,?,?)
### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry 'six' for key 'user_loginName_uindex'
; Duplicate entry 'six' for key 'user_loginName_uindex'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry 'six' for key 'user_loginName_uindex'] with root cause

运行spring boot显示以上错误,但数据还是成功的插入到数据库中,报错的意思时插入了重复的数据,向唯一字段插入相同数据。

解决过程:

1.检查了我的数据库表发现数据库表中添加了Unique的约束。Unique约束是唯一性约束,可以确保一列或者几列不出现重复值。

 2.我去掉了Unique,运行发现数据库直接插入了两行一模一样的数据,说明我的注册功能的代码运行了两遍,再检查代码发现我return的是login页面。

 返回到login页面时的url为http://localhost:8080/register?userName=%E8%B5%B5%E5%85%AD&identityCode=456795555225452&email=457698826%40qq.com&mobile=1550000&gender=0&loginName=six&password=,这时项目又将数据存储了一遍造成了数据重复。

最后return的是重定向的login:return "redirect:/login";项目正常运行。

return ”login“是转发,url不发生改变

return "redirect:/login";是重定向,url发生改变

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值