我正在尝试为实体的ID而不是通常的ObjectId使用自定义对象 - 我们的想法是拥有一个复合_id,其中包含一个“version”以及标识符。
以下是我想用于ID的内容:
public class VersionedId implements DBObject {
ObjectId _id;
Long _version;
public Map toMap() {
Map<String, Object> map = new HashMap<String, Object>(2);
map.put("_id", _id);
map.put("_version", _version );
return map;
}
}
然后实体看起来像这样 - 父引用子实体:
@Entity (value = "entities")
public class VersionedEntity {
@Id
VersionedId _id;
@Reference
VersionedSubEntity subEntity;
}
...以及引用的子实体:
@Entity (value = "subentities")
public class VersionedSubEntity {
@Id
VersionedId _id;
}
保存和加载VersionedSubEntity都可以正常工作,保存 VersionedEntity也是如此 - 使用_id
和_version
正确创建了DBRef。但是,尝试加载 VersionedEntity会引发以下情况:
java.lang.ClassCastException: com.mongodb.BasicDBObject cannot be cast to com.mongodb.DBRef
at com.google.code.morphia.mapping.Mapper.fromDb(Mapper.java:483)
at com.google.code.morphia.mapping.Mapper.fromDBObject(Mapper.java:267)
at com.google.code.morphia.query.MorphiaIterator.processItem(MorphiaIterator.java:53)
at com.google.code.morphia.query.MorphiaIterator.next(MorphiaIterator.java:48)
at com.google.code.morphia.query.QueryImpl.get(QueryImpl.java:344)
我做错了什么提示?