【问题标题】:DuplicateKeyException in mongodb and spring bootmongodb和spring boot中的DuplicateKeyException
【发布时间】:2018-05-24 12:20:44
【问题描述】:

我正在使用 Spring Boot 和 MongoDB,并且能够成功地将文档存储在 MongoDB 中。当我尝试插入第二个文档时,它显示duplicatekeyexception。异常的总信息如下:

com.mongodb.DuplicateKeyException:写入失败,错误代码为 11000 和错误消息'E11000 重复密钥错误集合: Football_Admin.SignUp 索引:id 复制密钥:{ : 0 }'

代码如下:

SignUpRepository.java

package com.admin.Repository;

import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

import com.admin.Model.SignUp;

@Repository
public interface SignUpRepository extends MongoRepository<SignUp,String>{

}

控制器

@Controller
@RequestMapping("/SignIn_Up")
public class HomeController {

    @Autowired
    SignUpRepository repository;


    @RequestMapping(value = "/addadmin", method = RequestMethod.POST)
    public String addAdmin(@ModelAttribute("SignUp") SignUp sign) throws NoSuchAlgorithmException,InvalidKeySpecException {
        String  originalPassword = sign.getPassword();
        String generatedSecuredPasswordHash = generateStorngPasswordHash(originalPassword);
        String email = sign.getEmail();
        String fullname = sign.getFullName();
        try {
        sign.setEmail(email);
        sign.setFullName(fullname);
        sign.setPassword(generatedSecuredPasswordHash);
        repository.save(sign);
        }
        catch (DuplicateKeyException e) {
            e.printStackTrace();
        }
        System.out.println(generatedSecuredPasswordHash);
        System.out.println("Email name is:"+sign.getEmail());
        System.out.println("Full Name is:"+sign.getFullName());
        System.out.println("Password is:"+sign.getPassword());
        return "welcome";
    }

实体

package com.admin.Model;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection="SignUp")
public class SignUp {
@Id
private int id;
private String fullName;
private String email;
private String password;
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getFullName() {
    return fullName;
}
public void setFullName(String fullName) {
    this.fullName = fullName;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}

public String toString() {
    return id+""+fullName+""+password;
}
public String getEmail() {
    return email;
}
public void setEmail(String email) {
    this.email = email;
}


}

【问题讨论】:

  • 你的实体是什么样的?
  • @MạnhQuyếtNguyễn 添加了实体。刷新页面

标签: spring mongodb spring-boot spring-data


【解决方案1】:

MongoDb 驱动程序在插入时不知道如何创建 int 类型的唯一 ID,因此您收到唯一索引异常

所以要么手动创建和维护索引(相当困难),要么将 id 字段类型更改为ObjectId

【讨论】:

  • 谢谢。只需将数据类型更改为 String 即可完美运行。
  • 如果可能的话,是否有任何资源对如何手动创建和维护索引有用??
猜你喜欢
  • 2018-03-09
  • 2013-05-04
  • 2019-09-02
  • 2014-11-17
  • 2016-02-22
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
相关资源
最近更新 更多