Sono disponibili le seguenti opzioni per farlo funzionare.
Per sottoclasse
Se sottoclassi ogni volta con un tipo generico concreto, funziona:
public class MyClassCacheEntity extends CacheEntity<MyClass> {}
Utilizzando BsonDocument
+ Jackson
Per evitare la sottoclasse puoi provare a memorizzare oggetti arbitrari come BsonDocument
-s e serializzali/deserializzali usando 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);
}
}
Funziona finché non eviti la convenzione getter/setter per withValue()
e value()
metodi, altrimenti Mongo inizia a lamentarsi dello stesso problema con i generici.
Lo stesso con bson puro
Penso che puoi anche provare a farlo come sopra usando org.bson.codecs.pojo.PojoCodec
che puoi creare o estrarre dall'attuale registro dei codec mongo. Se lo conosci in anticipo e gli dai la vera classe, non dovrebbe lamentarsi dei generici.