2012-01-13 60 views
3

我使用Mongo与本地Java驱动程序(没有第三方库/ ORM)。我有这样的:Mongo ReflectionDBObject将所有嵌入数组的元素映射到一个类;

public class Release extends ReflectionDBObject { 

    //other fields omitted  

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

} 

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

如果我想检索具有两个“ReleaseDetailsByTerritory”条目的“释放”项,并在包含两个ReleaseDetailsByTerritory类实例列表的发布类的实例它们自动实例化,我有要做到这一点:

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

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

有没有办法来告诉我希望所有的司机蒙戈和嵌入式阵列中的任何元素映射到某一类?例如:

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

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

+0

查看源代码,我不认为这是可能的。我假设你尝试传递“ReleaseDetailsByTerritory”?那么,没有.0或。*? – 2012-01-13 12:52:07

+0

是的,我试着传递“ReleaseDetailsByTerritory”,它不起作用。我认为你是对的,我也只是看到了消息来源,这就是那里的一切。如果你想让你的评论成为答案,我会让它成为“选择答案”。如果没有,我会自己回答(2天内)。 – 2012-01-13 14:08:12

回答

2

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

您可能需要考虑实现您自己的“文档”类实现,该类可以完成您所需的任何操作,而无需转到像Morphia这样的完整映射解决方案(实际上它非常优雅,至少比Spring更优秀) 。

你也可以考虑在jira.mongodb.org打开一个JIRA问题,并要求此功能。

相关问题