Desculpe pela pergunta muito idiota. Eu estou usando o Morphia 1.00. Tem alguma entidade:
@Entity("Vacancy")
public class Vacancy {
@Id
private ObjectId id;
@Version
long version;
private String title;
e alguns outros campos, setter e getters. Tentando salvar instâncias idênticas:
Vacancy vacancy1 = new Vacancy();
vacancy1.setTitle("Dumm");
Vacancy vacancy2 = new Vacancy();
vacancy2.setTitle("Dumm");
vacancyDao.getDatastore().save(vacancy1);
vacancyDao.getDatastore().save(vacancy2);
Como eu sei, o mongoDb deve executar o comando upsert (significa "update if present; insert (um único documento) se estiver faltando"). Mas, em vez de apenas atualizar o campo _id, o mongo salva uma nova entidade no banco de dados.
Respostas:
9 para resposta № 1Quando você não especifica o ObjectId para um objeto (documento) que você irá inserir, o morphio gera um "novo" ObjectId e o coloca antes que o objeto (documento) possa ser inserido.
Assim, todo objeto que não tiver o ObjectId receberá o novo e único objectId e o objeto será tratado como novo "documento".
Se você quiser atualizar, faça algo como
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"