Es gibt folgende Optionen, damit es funktioniert.
Durch Unterklassen
Wenn Sie jedes Mal eine Unterklasse mit einem konkreten generischen Typ erstellen, funktioniert es:
public class MyClassCacheEntity extends CacheEntity<MyClass> {}
Durch Verwendung von BsonDocument
+ Jackson
Um Unterklassen zu vermeiden, können Sie versuchen, beliebige Objekte als BsonDocument
zu speichern -s und serialisieren/deserialisieren Sie sie mit 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);
}
}
Dies funktioniert, bis Sie Getter/Setter-Konventionen für withValue()
vermeiden und value()
Methoden, sonst fängt Mongo an, sich über das gleiche Generika-Problem zu beschweren.
Dasselbe gilt für reines Bson
Ich denke, Sie können es auch mit org.bson.codecs.pojo.PojoCodec
versuchen, dasselbe wie oben zu tun die Sie entweder erstellen oder aus der aktuellen Mongo-Codecs-Registrierung extrahieren können. Wenn Sie es im Voraus wissen und ihm die echte Klasse geben, sollte es sich nicht über Generika beschweren.