如何将存储在MongoDB中的复合ID转换为Morphia Java实体对象?

时间:2017-09-27 11:52:48

标签: java morphia

_id是复合ID时出现问题。然后,我无法将其转换为Morphia Java实体对象。

我的MongoDB中的JSON如下所示:

{
    "_id" : {
        "id1" : "SAMPLE_ID1",
        "id2" : "SAMPLE_ID2"
    }
}

Java代码:

import org.mongodb.morphia.annotations.Id;

@Entity(value = "MyCollection", noClassnameStored = true)
public class MyObject {

    @Id
    private MyObjectId thisId;

    //....
}

public class MyObjectId{

    @Property("id1")
    private String id1; 

    @Property("id2")
    private String id2;

    //.....
}

我正在使用morphia v1.3.2。

当我插入对象时,我得到以下异常:

  

java.lang.RuntimeException:java.lang.ClassCastException:org.bson.types.ObjectId无法强制转换为com.mongodb.DBObject       at org.mongodb.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:76)       在org.mongodb.morphia.mapping.Mapper.readMappedField(Mapper.java:850)       at org.mongodb.morphia.mapping.Mapper.updateKeyAndVersionInfo(Mapper.java:725)       at org.mongodb.morphia.DatastoreImpl.postSaveOperations(DatastoreImpl.java:1422)       at org.mongodb.morphia.DatastoreImpl.postSaveOperations(DatastoreImpl.java:1408)       在org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.java:1292)       在org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.java:775)       在org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.java:758)   .......

当我选择对象时,我得到以下异常:

  

java.lang.RuntimeException:java.lang.ClassCastException:org.bson.types.ObjectId无法强制转换为com.mongodb.DBObject       at org.mongodb.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:76)       在org.mongodb.morphia.mapping.Mapper.readMappedField(Mapper.java:850)       at org.mongodb.morphia.mapping.Mapper.fromDb(Mapper.java:282)       在org.mongodb.morphia.mapping.Mapper.fromDBObject(Mapper.java:193)       at org.mongodb.morphia.query.MorphiaIterator.convertItem(MorphiaIterator.java:134)       at org.mongodb.morphia.query.MorphiaIterator.processItem(MorphiaIterator.java:146)       在org.mongodb.morphia.query.MorphiaIterator.next(MorphiaIterator.java:117)       在org.mongodb.morphia.query.QueryImpl.asList(QueryImpl.java:147)   ......

1 个答案:

答案 0 :(得分:1)

我有一个非常类似的设置,我开始工作。我认为您需要做的就是将@Entity添加到MyObjectId,所以

@Entity(noClassnameStored = true)
public class MyObjectId { 

  @Property("id1")
  private String id1; 

  @Property("id2")
  private String id2;

  public MyObjectId() {
  }

  public MyObjectId(String id1, String id2) {
    this.id1 = id1;
    this.id2 = id2;
  }

}

我似乎记得编组时需要使用no-args构造函数。