4

非常にばかげた質問で申し訳ありません。モルフィア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 フィールドを更新するだけでなく、mongo は新しいエンティティを DB に保存します。

4

1 に答える 1

10

挿入しようとしているオブジェクト (ドキュメント) の 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"
于 2011-09-04T07:05:24.230 に答える