Der Mongo-Java-Treiber hat festgestellt, dass der Wert von serial
kann in einen INT32 "passen", sodass er als solcher behandelt wird. Wenn Sie doc.getLong()
aufrufen Sie fordern den Treiber auf, seine Ganzzahl in einen Long umzuwandeln, daher die Klassenumwandlungsausnahme. Wenn beispielsweise der Wert von serial
war 2147483648
(d. h. der maximale ganzzahlige Wert + 1), dann würde der Mongo-Java-Treiber dies als INT64 betrachten und Sie könnten dann sicher doc.getLong()
aufrufen .
Seit (a) haben Sie dieses Attribut also als Long
modelliert in Ihrem Klassenmodell und (b) nicht jeder persistente Wert dieses Attributs muss als INT64
gespeichert werden ... müssen Sie beim Konvertieren in Long auf den persistenten Typ achten.
Wie? Nun, solange die serial
Das Attribut wird als eine Art Zahl beibehalten (z. B. INT32
, INT64
) dann dieser Aufruf ...
doc.get(DBConstants.SERIAL)
... gibt immer ein Objekt zurück, das eine Unterklasse von java.lang.Number
ist und daher an Number
gecastet und mit longValue()
wird funktionieren.
Zum Beispiel:
serial = ((Number) doc.get(DBConstants.SERIAL)).longValue()