Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将存储在MongoDB中的复合ID转换为Morphia Java实体对象?_Java_Morphia - Fatal编程技术网

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

如何将存储在MongoDB中的复合ID转换为Morphia Java实体对象?,java,morphia,Java,Morphia,当\u id是一个复合id时,我遇到了一个问题。然后,我无法将其转换为Morphia Java实体对象 我的MongoDB中的JSON如下所示: { "_id" : { "id1" : "SAMPLE_ID1", "id2" : "SAMPLE_ID2" } } Java代码: import org.mongodb.morphia.annotations.Id; @Entity(value = "MyCollection", noClassna

\u 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 位于org.mongodb.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:76) 位于org.mongodb.morphia.mapping.Mapper.readMappedField(Mapper.java:850) 位于org.mongodb.morphia.mapping.Mapper.updateKeyAndVersionInfo(Mapper.java:725) 位于org.mongodb.morphia.DatastoreImpl.postSaveOperations(DatastoreImpl.java:1422) 位于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 位于org.mongodb.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:76) 位于org.mongodb.morphia.mapping.Mapper.readMappedField(Mapper.java:850) 位于org.mongodb.morphia.mapping.Mapper.fromDb(Mapper.java:282) 位于org.mongodb.morphia.mapping.Mapper.fromDBObject(Mapper.java:193) 位于org.mongodb.morphia.query.morphiatierator.convertItem(morphiatierator.java:134) 位于org.mongodb.morphia.query.morphiatierator.processItem(morphiatierator.java:146) 位于org.mongodb.morphia.query.morphiatierator.next(morphiatierator.java:117) 位于org.mongodb.morphia.query.QueryImpl.asList(QueryImpl.java:147)


我有一个非常相似的设置,我得到了工作。我认为您需要做的就是将@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构造函数