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()