2011-09-01 101 views
3

對不起,很愚蠢的問題。 我正在使用Morphia 1.00。 有一些實體:Morphia保存新的實體,而不是更新_id

@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的必須執行更新插入命令(指「更新(如果存在);插入(單個文檔)如果丟失」)。 但不是隻更新_id字段,mongo將新實體保存在數據庫中。

回答

8

當您不指定要插入的對象(文檔)的ObjectId時,morphia會生成一個'new'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" 
相關問題