Spring MongoRepository обновляет или обновляет вместо того, чтобы вставлять

Я использую:

org.springframework.data.mongodb.repository.MongoRepository

Я начинаю с пустым БДОМ и создать объект с _id = 1234, например, и установить некоторое другое поле Строки для hello, например, а затем сделать:

repository.save(object);

Все хорошо, это сохраняет документ в MondoDB.

Я создаю новый объект, устанавливаю тот же _id = 1234 но устанавливаю другое поле String в world а затем в другое сохранение:

repository.save(newObject);

Результаты: сохранение сохраняет, но обновляет исходный объект.

Ожидаемые результаты: это должно завершиться неудачно с использованием DuplicateKeyException поскольку _id уникален, и при каждом сохранении я использую 2 отдельных объекта.

Дефект весной или я что-то не так???

Ответы

Ответ 1

Сохранить, по определению, должно обновлять объект в стиле upsert, обновлять, если он присутствует, и вставлять, если нет. Прочтите документацию об операции save на веб-сайте MongoDb

Операция вставки в mongodb имеет поведение, которое вы ожидаете, но из документации MongoRepository кажется, что вставка делегирована для сохранения, поэтому она не будет иметь никакого значения. Но вы можете попробовать попробовать и посмотреть, работает ли это для вас. В противном случае вы можете просто сделать запрос до того, чтобы проверить, существует ли объект, так как это индексный поиск, он будет быстрым.

Ответ 2

приложение должно обновляться только тогда, когда у вас есть @Id аннотация для одного из полей, после того, как долгое затруднение обнаружило это

@Document(collection="bus")
public class Bus {

//  @Indexed(unique=true, direction=IndexDirection.DESCENDING, dropDups=true)
    @Id
    private String busTitle; 
    private int totalNoOfSeats;
    private int noOfSeatsAvailable; 
    private String busType; 
}

но почему-то я не мог использовать @Indexed (unique = true, direction = IndexDirection.DESCENDING, dropDups = true)