Spring mongodb получает идентификатор вставленного элемента после сохранения

Я работаю с Spring MongoDb.

Я создаю различные объекты, используя метод insert: http://docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb/core/MongoOperations.html#insert-java.lang.Object-

Однако все методы возвращают void. Мне нужно вернуть ObjectId вставленного документа.

Каков наилучший способ получить его?

Ответ 1

Это довольно интересно и подумал, что я поделюсь. Я просто вычислил решение для этого с помощью комментария BatScream выше:

Вы должны создать объект и вставить его в свой MongoDB:

    Animal animal = new Animal();
    animal.setName(name);
    animal.setCat(cat);

    mongoTemplate.insert(animal);

Ваш класс животных будет выглядеть с помощью геттеров и настроек для всех полей:

public class Animal {

    @Id
    @JsonProperty
    private String id;
    @JsonProperty
    private String name;
    @JsonProperty
    private String cat;

    public String getId() {
        return id;
    }
}

ПОСЛЕ того, как вы вложили вкладку в mongoTemplate.insert(animal);, вы можете фактически вызвать метод animal.getId(), и он вернет обратно ObjectId, который был создан.

Ответ 2

У меня была та же проблема с @AlanH что animal.getId() является null. А потом я только что понял, что мое поле идентификатора было установлено как окончательное поле с методом wither. Поэтому, конечно, getId() имеет значение null, поскольку поле id является неизменным, а метод wither возвращает новый объект с id.

если это так: используйте animal = template.insert(animal).