Spring Data MongoRepository save导致Duplicate Key错误

时间:2018-05-03 11:01:21

标签: spring-boot spring-data spring-mongo

这是实体:

@Document
@Data
public class ApplicationUser {
    private String name;
    @Indexed(unique = true)
    private String email;
    private String organization = null;
    // other fields
}

我使用他们的电子邮件获取此用户,然后更改他们的名字。我使用ApplicationUserRepository的 autowired 实例。

ApplicationUser applicationUser = applicationUserRepository.findByEmail("abc@gmail.com");
applicationUser.setName("John Doe 2");

然后我尝试在数据库中再次更新此实体:

applicationUserRepository.save(applicationUser);

我在字段电子邮件中收到重复的密钥错误。为什么会这样? 据我所知,如果ObjectId相同, save 方法会更新同一文档。由于我没有更改objectId,为什么在保存期间尝试创建一个新的ApplicationUser?

2 个答案:

答案 0 :(得分:0)

我得到了解决方案。 在创建实体时,我必须明确声明Id。

这是实体:

@Document
@Data
public class ApplicationUser {
    @Id
    private ObjectId _id;
    private String name;
    @Indexed(unique = true)
    private String email;
    private String organization = null;
    // other fields
}

答案 1 :(得分:0)

我遇到了类似的问题,我正在通过id进行检索,然后尝试更新检索到的POJO,然后通过MongoRepository.save()调用将其保存回去。它在带有Spring Boot 2.1.0的MongoDB 4.x上。我在服务方法中添加了@Transactional批注,所有内容都像一个魅力一样工作。解决了ID字段上的重复键异常。