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

4

非常抱歉问一个很愚蠢的问题。 我使用的是Morphia 1.00. 有一些实体:

@Entity("Vacancy")
public class Vacancy {

@Id
private ObjectId id;
@Version
long version;

private String title;

还有其他字段,setter和getter。尝试保存相同的实例:

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个回答

11
当您插入一个未指定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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接