Ho un classi del modello comeCome ottenere un elenco correttamente digitato da un ReflectionDBObject
public class MyClass extends ReflectionDBObject {
private List<NiceAttribute> attributes;
...
}
public class NiceAttribute extends ReflectionDBObject {
...
}
creo in un modo typesafe, come
List<NiceAttribute> attrs = new ArrayList<NiceAttribute>();
attrs.add(new NiceAttribute());
MyClass myClass = new MyClass();
myClass.setAttributes(attrs);
quindi salvarlo mongo, e recuperare con un codice come
DBCollection col = ...;
col.setObjectClass(MyClass.class)
MyClass foundObject = (MyClass)col.findOne();
Ma il problema è che foundObject
s' attributes
diventa una lista di BasicDBObject
. Sembra che un driver non possa (o non voglia) rilevare un tipo di elementi dell'elenco. Si tratta di una limitazione del driver o mi sono perso qualcosa? Quale sarebbe un'elegante soluzione alternativa al problema?
BTW, so di Morphia ecc. Forse risolve il problema. Ma il mio progetto è minuscolo e non voglio complicare le cose con un ulteriore livello di astrazione.
Morphia è di circa 10-15 volte più lento del conducente. Stai meglio scrivendo il tuo codice per fare la mappatura. –
Abbiamo test delle prestazioni in morfina che dimostra che questo non è vero. Se si dispone di alcuni test che mostrano questo problema di prestazioni, sarebbe opportuno condividerli. –
In realtà ho fatto test molto basilari, in cui scrivo la stessa voce circa 10-20k volte, usando driver, poi Spring Mongo Db poi Morphia. Il driver è il più veloce, Spring Mongo è circa 2 volte più lento e la morfina è circa 7-10 volte più lenta. Anche su un mongo con reale raccolta di frammenti (su più macchine) è ancora più lento. Puoi facilmente testarlo. –