【问题标题】:Spring Data MongoRepository save causing Duplicate Key errorSpring Data MongoRepository 保存导致重复键错误
【发布时间】:2018-11-29 00:26:40
【问题描述】:

这里是实体:

@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 呢?

【问题讨论】:

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


    【解决方案1】:

    我得到了解决方案。 创建实体时,我必须明确声明 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
    }
    

    【讨论】:

      【解决方案2】:

      我有类似的问题,我通过 id 检索,然后尝试更新检索到的 POJO,然后使用 MongoRepository.save() 调用将其保存回来。它在带有 Spring Boot 2.1.0 的 MongoDB 4.x 上。我将@Transactional 注释添加到我的服务方法中,一切都像一个魅力。 id 字段上的重复键异常已解决。

      【讨论】:

        猜你喜欢
        • 2022-11-02
        • 1970-01-01
        • 2015-01-24
        • 2016-08-27
        • 1970-01-01
        • 1970-01-01
        • 2010-11-14
        • 1970-01-01
        相关资源
        最近更新 更多