/ / Morphia salva novas entidades em vez de atualizar _id - java, mongodb, morphia, object-identity

Morphia salva novas entidades em vez de atualizar _id - java, mongodb, morphia, identidade de objeto

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 № 1

Quando 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"