【问题标题】:Morphia saves new entities instead of update _idMorphia 保存新实体而不是更新 _id
【发布时间】:2011-11-08 11:23:24
【问题描述】:

很抱歉提出了一个非常愚蠢的问题。 我正在使用 Morphia 1.00。 有一些实体:

@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 必须执行 upsert 命令(意思是“如果存在则更新;如果缺少则插入(单个文档)”)。 但是,mongo 不仅仅更新 _id 字段,而是将新实体保存在数据库中。

【问题讨论】:

    标签: java mongodb morphia object-identity


    【解决方案1】:

    当您没有为要插入的对象(文档)指定 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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 2016-12-27
      相关资源
      最近更新 更多