Morphia сохраняет новые сущности вместо обновления _id - PullRequest
4 голосов
/ 01 сентября 2011

Извините за очень тупой вопрос.Я использую Morphia 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, Монго сохраняет новую сущность в БД.

1 Ответ

10 голосов
/ 04 сентября 2011

Когда вы не указываете 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"
...