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发生改变