sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb java:Perist POJO-klass med generiskt fält

Det finns följande alternativ för att få det att fungera.

Genom underklassning

Om du underklassar med konkret generisk typ varje gång, fungerar det:

public class MyClassCacheEntity extends CacheEntity<MyClass> {}

Genom att använda BsonDocument + Jackson

För att undvika underklassning kan du försöka lagra godtyckliga objekt som BsonDocument -s och serialisera/deserialisera dem med 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);
  }
}

Detta fungerar tills du undviker getters/setters-konventionen för withValue() och value() metoder, annars börjar Mongo klaga på samma generiska problem.

Samma med ren bson

Jag tror att du också kan försöka göra det på samma sätt som ovan med org.bson.codecs.pojo.PojoCodec som du antingen kan skapa eller extrahera från det aktuella mongo-codec-registret. Om du vet i förväg och ger den den riktiga klassen, bör den inte klaga på generika.




  1. MongoDB som leverantör av statiska filer?

  2. Vilka är de underliggande datastrukturerna som används för Redis?

  3. Vad är det korrekta sättet att starta en mongod-tjänst på linux / OS X?

  4. Kan inte lösa Assembly- eller Windows-metadatafilen 'System.Data.dll'