sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongodb java:Perist POJO klasse med generisk felt

Der er følgende muligheder for at få det til at fungere.

Ved underklassificering

Hvis du underklasser med konkret generisk type hver gang, virker det:

public class MyClassCacheEntity extends CacheEntity<MyClass> {}

Ved at bruge BsonDocument + Jackson

For at undgå underklassificering kan du prøve at gemme vilkårlige objekter som BsonDocument -s og serialiser/deserialiser dem ved hjælp af 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);
  }
}

Dette virker indtil du undgår getters/setters-konventionen for withValue() og value() metoder, ellers begynder Mongo at klage over det samme generiske problem.

Samme med ren bson

Jeg tror, ​​du kan også prøve at gøre det på samme måde som ovenfor ved at bruge org.bson.codecs.pojo.PojoCodec som du enten kan oprette eller udtrække fra det aktuelle mongo-codecs-register. Hvis du ved det på forhånd og giver det den rigtige klasse, bør den ikke klage over generiske lægemidler.




  1. Robo 3T-fejl:Netværket er ikke tilgængeligt

  2. opdater specifikt element fra indlejret dokumentarray mongodb hvor har to matches

  3. MongoDB med Mongoose limit underdokumenter

  4. Mongo docker-billede kører ikke script efter oprettet