Mongo Javaドライバーは、serial
の値を決定しました INT32に「適合」できるため、INT32はそのように扱われます。 doc.getLong()
を呼び出すとき 整数をLongにキャストするようにドライバーに要求しているため、クラスキャスト例外が発生します。たとえば、serial
の値が 2147483648
でした (つまり、最大整数値+ 1)次に、Mongo JavaドライバーはそれをINT64と見なし、doc.getLong()
を安全に呼び出すことができます。 。
したがって、(a)以降、この属性をLong
としてモデル化しています。 クラスモデルで、(b)この属性のすべての永続化された値がINT64
としてのストレージを必要とするわけではありません ... Longに変換するときは、永続化されたタイプに注意する必要があります。
どのように?ええと、serial
である限り、 属性は、ある種の数値として保持されます(例:INT32
、INT64
)次に、この呼び出し...
doc.get(DBConstants.SERIAL)
...常にjava.lang.Number
のサブクラスであるオブジェクトを返します したがって、Number
にキャストします longValue()
を使用します 動作します。
例:
serial = ((Number) doc.get(DBConstants.SERIAL)).longValue()