MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Mongodb java:Perist POJO klasa z polem generycznym

Dostępne są następujące opcje, aby to działało.

Przez podklasy

Jeśli za każdym razem tworzysz podklasę z konkretnym typem ogólnym, to działa:

public class MyClassCacheEntity extends CacheEntity<MyClass> {}

Za pomocą BsonDocument + Jackson

Aby uniknąć podklas, możesz spróbować przechowywać dowolne obiekty jako BsonDocument -s i serializuj/deserializuj je za pomocą Jacksona:

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);
  }
}

Działa to, dopóki nie unikniesz konwencji getterów/setterów dla withValue() i value() metod, w przeciwnym razie Mongo zacznie narzekać na ten sam problem z lekami generycznymi.

To samo z czystym bsonem

Myślę, że możesz również spróbować zrobić to samo, co powyżej, używając org.bson.codecs.pojo.PojoCodec które można utworzyć lub wyodrębnić z bieżącego rejestru kodeków mongo. Jeśli wiesz z góry i nadajesz mu prawdziwą klasę, nie powinien narzekać na leki generyczne.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zaktualizować dokument MongoEngine za pomocą dyktatu Pythona?

  2. Jak znaleźć nieużywane indeksy w MongoDB?

  3. tworzenie innej bazy danych dla każdej kolekcji w MongoDB 2.2

  4. MongoDB Capped Collection nie usuwa dokumentów

  5. Błąd [ERR_HTTP_HEADERS_SENT]:nie można ustawić nagłówków po ich wysłaniu do klienta