如何从ReflectionDBObject获取正确类型的List

zam*_*mza 5 java mongodb

我有一个模型类

public class MyClass extends ReflectionDBObject {
    private List<NiceAttribute> attributes;    
    ...
}

public class NiceAttribute extends ReflectionDBObject {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我以类型安全的方式创建它,比如

List<NiceAttribute> attrs = new ArrayList<NiceAttribute>();
attrs.add(new NiceAttribute());
MyClass myClass = new MyClass();
myClass.setAttributes(attrs);
Run Code Online (Sandbox Code Playgroud)

然后将其保存到mongo,并使用类似的代码检索

DBCollection col = ...;
col.setObjectClass(MyClass.class)
MyClass foundObject = (MyClass)col.findOne();
Run Code Online (Sandbox Code Playgroud)

但问题是,foundObjectattributes变成了一个列表BasicDBObject.看起来驱动程序不能(或不想)检测列表项类型.这是司机限制,还是我错过了什么?这个问题的优雅解决方案是什么?

顺便说一句,我知道Morphia等.也许它解决了这个问题.但是我的项目很小,而且我不想让具有更多抽象层的东西复杂化.

Sco*_*dez -1

你应该使用 Morphia。它添加了对 POJO 和嵌入对象(和集合)的支持。它没有驱动程序要求您的类看起来像Map<String, Object>.