tengo unas clases del modelo comoCómo obtener una lista correctamente mecanografiada de un ReflectionDBObject
public class MyClass extends ReflectionDBObject {
private List<NiceAttribute> attributes;
...
}
public class NiceAttribute extends ReflectionDBObject {
...
}
creo que de una manera typesafe, como
List<NiceAttribute> attrs = new ArrayList<NiceAttribute>();
attrs.add(new NiceAttribute());
MyClass myClass = new MyClass();
myClass.setAttributes(attrs);
luego guardarlo en mongo, y recuperar con un código como
DBCollection col = ...;
col.setObjectClass(MyClass.class)
MyClass foundObject = (MyClass)col.findOne();
Pero el problema es que foundObject
's attributes
se convierte en una lista de BasicDBObject
. Parece que un controlador no puede (o no quiere) detectar un tipo de elemento de lista. ¿Es esto una limitación del conductor o me perdí algo? ¿Cuál sería una solución elegante para el problema?
Por cierto, sé de Morphia, etc. Quizás solucione el problema. Pero mi proyecto es pequeño, y no quiero complicar las cosas teniendo una capa más de abstracción.
Morphia es de unos 10-15x más lento que el conductor. Es mejor escribir tu propio código para hacer el mapeo. –
Tenemos pruebas de rendimiento en morphia que muestran que esto no es cierto. Si tiene algunas pruebas que muestran este problema de rendimiento, sería bueno si pudiera compartirlas. –
De hecho, he hecho pruebas muy básicas, donde escribo la misma entrada unas 10-20 veces, usando el controlador, luego Spring Mongo Db y luego Morphia. El conductor es más rápido, Spring Mongo es aproximadamente 2 veces más lento y la morfina es aproximadamente 7-10 veces más lenta. Incluso en un mongo con fragmentación de colección real (en máquinas múltiples) es aún más lento. Puedes probar esto fácilmente –