sql >> Databáze >  >> NoSQL >> MongoDB

Mongodb java:Perist POJO třída s obecným polem

Aby to fungovalo, existují následující možnosti.

Podle podtřídy

Pokud pokaždé použijete podtřídu s konkrétním obecným typem, funguje to:

public class MyClassCacheEntity extends CacheEntity<MyClass> {}

Pomocí BsonDocument + Jackson

Chcete-li se vyhnout podtřídění, můžete zkusit uložit libovolné objekty jako BsonDocument -s a serializovat/deserializovat je pomocí Jackson:

public class CacheEntity<V> {
  private String cacheId;
  private BsonDocument rawValue;

  // [...]

  // sets the value
  public void withValue(T o) {
    this.rawValue = BsonDocument.parse(new ObjectMapper().writeValueAsString(o))
  }

  // recovers the value
  public T value(Class<T> clazz) {
    return new ObjectMapper().readValue(this.rawValue.toJson(), clazz);
  }
}

Toto funguje, dokud se nevyhnete konvencím getter/setters pro withValue() a value() jinak si Mongo začne stěžovat na stejný generický problém.

Totéž s čistým bson

Myslím, že to můžete také zkusit udělat stejně jako výše pomocí org.bson.codecs.pojo.PojoCodec které můžete buď vytvořit nebo extrahovat z aktuálního registru mongo kodeků. Pokud víte předem a dáte tomu skutečnou třídu, neměl by si stěžovat na generika.




  1. Použití COD a CML k vytváření aplikací, které předpovídají skladová data

  2. MongoDB najde, kde se klíč rovná řetězci z pole

  3. node.js mongodb vybrat dokument podle _id node-mongodb-native

  4. Co je Express.js?