Сохранение Spring Data MongoRepository вызывает ошибку Duplicate Key - PullRequest
0 голосов
/ 03 мая 2018

Вот сущность:

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

Я получаю этого пользователя по электронной почте, а затем меняю его имя. Я использую экземпляр с автонастройкой в ​​ApplicationUserRepository.

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

Затем я снова пытаюсь обновить эту сущность в базе данных:

applicationUserRepository.save(applicationUser);

Я получаю сообщение об ошибке ключа на поле электронной почты. Почему это происходит? Насколько я понимаю из документации, метод save обновляет тот же документ, если ObjectId совпадает. Так как я не изменил objectId, то почему он пытается создать нового ApplicationUser во время сохранения?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

У меня была похожая проблема, когда я извлекался по идентификатору, а затем пытался обновить полученный POJO и затем сохранить его обратно с помощью вызова MongoRepository.save (). Это было на MongoDB 4.x с Spring Boot 2.1.0. Я добавил аннотацию @Transactional к своему методу обслуживания, и все заработало как шарм. Исключение дублированного ключа в поле id было разрешено.

0 голосов
/ 03 мая 2018

Я получил решение. При создании сущности я должен явно объявить 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
}
...