2011-09-01 3 views
3

매우 바보 같은 질문에 사과드립니다. Morphia 1.00을 사용하고 있습니다.Morphia가 update _id 대신 새 엔티티를 저장합니다.

@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에 새로운 엔티티를 저장합니다.

답변

8

삽입 할 개체 (문서)의 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" 
같은
관련 문제