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)