MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Mongodb java:Perist POJO class dengan bidang generik

Ada opsi berikut untuk membuatnya berfungsi.

Dengan membuat subkelas

Jika Anda subkelas dengan tipe generik konkret setiap kali, itu berfungsi:

public class MyClassCacheEntity extends CacheEntity<MyClass> {}

Dengan menggunakan BsonDocument + Jackson

Untuk menghindari subkelas, Anda dapat mencoba menyimpan objek arbitrer sebagai BsonDocument -s dan membuat cerita bersambung/deserialisasi menggunakan 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);
  }
}

Ini berfungsi sampai Anda menghindari konvensi getter/setter untuk withValue() dan value() metode, jika tidak, Mongo mulai mengeluh tentang masalah generik yang sama.

Sama dengan bson murni

Saya rasa, Anda juga dapat mencoba melakukan hal yang sama seperti di atas menggunakan org.bson.codecs.pojo.PojoCodec yang dapat Anda buat atau ekstrak dari registri codec mongo saat ini. Jika Anda tahu sebelumnya dan memberikannya kelas yang sebenarnya, seharusnya tidak mengeluh tentang obat generik.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Temukan dokumen dengan ObjectID di mongoDB

  2. MongoDB - Cara melakukan kueri pada banyak atribut dalam suatu objek dan mengelompokkan hasilnya

  3. @EnableMongoAuditing untuk MongoDB di Cloud Foundry / mongolab

  4. Memotong koleksi

  5. Mengimpor kelas domain dari modul mandiri GORM ke Grails