MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB:Der Versuch, Long aus JSON zu lesen, führt dazu, dass java.lang.Integer nicht in java.lang.Long umgewandelt werden kann

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