Morphia保存新实体而不是更新_id

时间:2011-09-01 14:40:36

标签: java mongodb morphia object-identity

抱歉非常愚蠢的问题。 我正在使用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命令(意思是“如果存在则更新;如果缺少则插入(单个文档)”)。 但是,mongo不是仅仅更新_id字段,而是将新实体保存在数据库中。

1 个答案:

答案 0 :(得分:10)

当你没有为要插入的对象(文档)指定ObjectId时,morphia会生成一个'new'ObjectId并在插入对象(文档)之前设置它。

因此,每个没有ObjectId的对象都将被赋予新的唯一objectId,该对象将被视为新的“document”。

如果您想要更新,请执行类似

的操作
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"