sql >> データベース >  >> NoSQL >> MongoDB

Mongodb java:汎用フィールドを持つPeristPOJOクラス

    それを機能させるには、次のオプションがあります。

    サブクラス化による

    毎回具体的なジェネリック型でサブクラス化すると、次のように機能します。

    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. MongoDBドキュメントからフィールドを完全に削除するにはどうすればよいですか?

    2. MongoDBJavaドライバー更新サブドキュメント

    3. ノードmongodb:エラー:parseErrorのために接続が閉じられました

    4. EntityFrameworkとMongoDb