MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Mongodb java:Perist POJO клас с общо поле

Има следните опции, за да работи.

Чрез подклас

Ако подкласирате всеки път с конкретен общ тип, това работи:

public class MyClassCacheEntity extends CacheEntity<MyClass> {}

Чрез използване на BsonDocument + Джаксън

За да избегнете подкласиране, можете да опитате да съхранявате произволни обекти като BsonDocument -s и ги сериализирайте/десериализирайте с помощта на 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);
  }
}

Това работи, докато не избегнете конвенцията за получаване/настройване за withValue() и value() методи, в противен случай Mongo започва да се оплаква от същия проблем с генеричните лекарства.

Същото и с чистия bson

Мисля, че можете също да опитате да го направите по същия начин като по-горе, като използвате org.bson.codecs.pojo.PojoCodec които можете или да създадете, или да извлечете от текущия регистър на кодеците mongo. Ако знаете предварително и му дадете истинска класа, той не трябва да се оплаква от генерични лекарства.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Не искам да започваш mongod с `sudo mongod`

  2. методът за запазване на mongoengine е отхвърлен?

  3. Doctrine ODM / MongoDB не опитва повторно заявки?

  4. Формат на датата Mongoose

  5. C# Mongo драйвер IMongoDatabase RunCommand за получаване на статистика на базата данни