如何将存储在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构造函数