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

MongoDB:JSONからLongを読み取ろうとすると、java.lang.Integerをjava.lang.Longにキャストできません

    Mongo Javaドライバーは、serialの値を決定しました INT32に「適合」できるため、INT32はそのように扱われます。 doc.getLong()を呼び出すとき 整数をLongにキャストするようにドライバーに要求しているため、クラスキャスト例外が発生します。たとえば、serialの値が 2147483648でした (つまり、最大整数値+ 1)次に、Mongo JavaドライバーはそれをINT64と見なし、doc.getLong()を安全に呼び出すことができます。 。

    したがって、(a)以降、この属性をLongとしてモデル化しています。 クラスモデルで、(b)この属性のすべての永続化された値がINT64としてのストレージを必要とするわけではありません ... Longに変換するときは、永続化されたタイプに注意する必要があります。

    どのように?ええと、serialである限り、 属性は、ある種の数値として保持されます(例:INT32INT64 )次に、この呼び出し...

    doc.get(DBConstants.SERIAL)
    

    ...常にjava.lang.Numberのサブクラスであるオブジェクトを返します したがって、Numberにキャストします longValue()を使用します 動作します。

    例:

    serial = ((Number) doc.get(DBConstants.SERIAL)).longValue()
    



    1. Mongodb-条件付きの場合は集約$push

    2. MongoDB $ extract

    3. エラーを出すMongoシェルオプションの複数回の出現

    4. Mongooseの保存コールバックはどのように機能しますか?