Morphia сохраняет новые объекты вместо обновления _id

Извините за очень тупой вопрос. Я использую Морфию 1.00. Иметь некоторую сущность:

@Entity("Vacancy")
public class Vacancy {

@Id
private ObjectId id;
@Version
long version;

private String title;

и некоторые другие поля, сеттеры и геттеры. Попытка сохранить идентичные экземпляры:

Vacancy vacancy1 = new Vacancy();
vacancy1.setTitle("Dumm");
Vacancy vacancy2 = new Vacancy();
vacancy2.setTitle("Dumm");

vacancyDao.getDatastore().save(vacancy1);
vacancyDao.getDatastore().save(vacancy2);

Насколько я знаю, mongoDb должен выполнить команду upsert (означает «обновить, если присутствует; вставить (один документ), если он отсутствует»). Но вместо того, чтобы просто обновить поле _id, монго сохраняет новый объект в БД.


person vacuum    schedule 01.09.2011    source источник


Ответы (1)


Когда вы не указываете ObjectId для объекта (документа), который вы собираетесь вставить, morphia генерирует «новый» ObjectId и устанавливает его до того, как объект (документ) может быть вставлен.

Таким образом, каждому объекту, у которого нет ObjectId, будет присвоен новый и уникальный objectId, и объект будет рассматриваться как новый «документ».

Если вы хотите обновить, сделайте что-то вроде

Vacancy vacancy1 = new Vacancy();
vacancy1.setTitle("Dumm");
Vacancy vacancy2 = new Vacancy();
vacancy2.setTitle("Dummmmm");

vacancyDao.getDatastore().save(vacancy1);

vacancy2.setId(vacancy1.getId());
vacancyDao.getDatastore().save(vacancy2);//This line will update the "Dumm" to "Dummmmm"
person Community    schedule 04.09.2011