为了账号安全,请及时绑定邮箱和手机立即绑定

spring data jpa save方法会重复插入数据

spring data jpa save方法会重复插入数据

慕侠2389804 2019-03-01 10:44:45
源代码: //控制层 @ResponseBody @PostMapping("/doRegister") public JSONObject register(String userName,String password,String email,String code,HttpServletRequest request,HttpServletResponse response){ JSONObject result = new JSONObject(); result.put("err", 1); HttpSession session = request.getSession(true); String verCode = (String)session.getAttribute(CODE_NAME); if(!verCode.equalsIgnoreCase(code)){ result.put("msg", "验证码输入错误"); //怀疑是这里的判断导致了重复数据问题 }else if(bbsUserService.hasUser(userName)){ result.put("msg", "用户已经存在"); }else{ BbsUser user = new BbsUser(); user.setBalance(10); user.setLevel(1); user.setScore(10); user = bbsUserService.setUserAccount(user); WebUtils.loginUser(request, response, user, true); result.put("err", 0); result.put("msg", "/bbs/index"); } return result; } //服务层 @Service public class BbsUserServiceImpl implements BbsUserService { @Override @Transactional public BbsUser setUserAccount(BbsUser user) { String pwd = HashUtil.generatePwd(password); user.setPassword(pwd); return bbsUserRepository.save(user); } //试过不同的写法 @Override public boolean hasUser(String userName) { // return bbsUserRepository.existsByUserName(userName); BbsUser byUserName = bbsUserRepository.findByUserName(userName); return byUserName == null ? false:true; } } 但是有时候运行的时候会有两条插入语句,偶尔又会没有。不知道为什么。 Hibernate: insert into bbs_user (balance, corp, email, level, password, score, user_name) values (?, ?, ?, ?, ?, ?, ?) Hibernate: insert into bbs_user (balance, corp, email, level, password, score, user_name) values (?, ?, ?, ?, ?, ?, ?) 有没有遇到过同样问题的,或者有什么思路。。求解/(ㄒoㄒ)/~~
查看完整描述

3 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

偶尔出现的话,我猜是你前端没有做重复点击的处理

查看完整回答
反对 回复 2019-03-01
?
喵喔喔

TA贡献1735条经验 获得超5个赞

同意楼上的说法。具体验证你可以在Controller上打个断电或者日志,看看是否存在多次调用的情况

查看完整回答
反对 回复 2019-03-01
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

如果连自动生成的id都是重复的呢?

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 7458 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信