Mongo ReflectionDBObject,将所有嵌入数组的元素映射到一个类;

时间:2012-01-13 09:29:02

标签: java mongodb mapping driver mongo-java

我使用Mongo和本机Java驱动程序(没有第三方库/ ORM)。我有这个:

public class Release extends ReflectionDBObject {

    //other fields omitted    

    private List<ReleaseDetailsByTerritory> releaseDetailsByTerritory = new ArrayList<ReleaseDetailsByTerritory>();

}

public class ReleaseDetailsByTerritory extends ReflectionDBObject { //...}

如果我想检索具有两个“ReleaseDetailsByTerritory”条目的“Release”条目,并在包含两个ReleaseDetailsByTerritory类实例的List的Release类实例中自动实例化,我必须这样做:

releaseColl.setObjectClass(Release.class);
releaseColl.setInternalClass("ReleaseDetailsByTerritory.0", ReleaseDetailsByTerritory.class);
releaseColl.setInternalClass("ReleaseDetailsByTerritory.1", ReleaseDetailsByTerritory.class);
Release r = (Release) releaseColl.findOne();

即。我需要专门将嵌入数组的每个潜在元素映射到相应的类。

有没有办法告诉Mongo驱动程序我希望嵌入式数组的所有元素和任何元素都映射到某个类?类似的东西:

collection.setInternalClass("ReleaseDetailsByTerritory.*", ReleaseDetailsByTerritory.class);

感谢。请不要说“使用Spring MondoDb模块或Morphia”。我想知道使用Mongo本机Java驱动程序是否可以实现这一点。

1 个答案:

答案 0 :(得分:2)

查看源代码,我不认为这是可能的。也没有明显的方法来为您需要的东西创建便利功能。必须为每个数组元素调用setInternalClass几乎不是一个选项,因为大量的内存使用会导致大数组。

您可能需要考虑实现自己的“Document”类实现,它可以满足您的需求,而无需转到完整的映射解决方案,例如Morphia(实际上非​​常优雅,至少比Spring更好)。

您还可以考虑在jira.mongodb.org上打开JIRA问题并请求此功能。