Het Mongo Java-stuurprogramma heeft vastgesteld dat de waarde van serial
kan in een INT32 'passen', dus het behandelt het als zodanig. Wanneer u doc.getLong()
. aanroept je vraagt de bestuurder om zijn Integer naar een Long te casten, vandaar de class cast-uitzondering. Als bijvoorbeeld de waarde van serial
was 2147483648
(d.w.z. de maximale integerwaarde + 1), dan beschouwt de Mongo Java-driver dat als een INT64 en kunt u veilig doc.getLong()
aanroepen .
Dus, aangezien (a) u dit kenmerk hebt gemodelleerd als een Long
in uw klassenmodel en (b) niet elke persistente waarde van dit kenmerk vereist opslag als een INT64
... je moet gevoelig zijn voor het persistente type bij het converteren naar een Long.
Hoe? Welnu, zolang de serial
attribuut blijft bestaan als een soort nummer (bijv. INT32
, INT64
) dan deze oproep ...
doc.get(DBConstants.SERIAL)
... zal altijd een object retourneren dat een subklasse is van java.lang.Number
en dus casten naar Number
en met behulp van longValue()
zal werken.
Bijvoorbeeld:
serial = ((Number) doc.get(DBConstants.SERIAL)).longValue()