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