sql >> Database >  >> NoSQL >> MongoDB

Mongodb java:Perist POJO-klasse met generiek veld

Er zijn de volgende opties om het te laten werken.

Door subclassificatie

Als je elke keer subklassen met een concreet generiek type, werkt het:

public class MyClassCacheEntity extends CacheEntity<MyClass> {}

Door BsonDocument . te gebruiken + Jackson

Om subclassificatie te voorkomen, kunt u proberen willekeurige objecten op te slaan als BsonDocument -s en serialiseer/deserialiseer ze met 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);
  }
}

Dit werkt totdat u getters/setters-conventies voor withValue() . vermijdt en value() methoden, anders begint Mongo te klagen over hetzelfde probleem met generieke geneesmiddelen.

Hetzelfde met pure bson

Ik denk dat je hetzelfde kunt proberen als hierboven met org.bson.codecs.pojo.PojoCodec die u kunt maken of extraheren uit het huidige mongo-codecs-register. Als je het van tevoren weet en het de echte klasse geeft, zou het niet moeten klagen over generieke geneesmiddelen.




  1. Meteor / ReactJS - Knipperend UI-probleem:twee keer renderen voor en na het controleren van een database

  2. mongo-telrijen uit een reeks verstrekte gegevens

  3. Hoe u dubbele sleutelfouten veilig kunt negeren met insert_many

  4. Meerdere waarden retourneren met Go Mongo Distinct