sql >> Database >  >> NoSQL >> MongoDB

MongoDB:proberen om Long uit JSON te lezen, veroorzaakt java.lang.Integer kan niet worden gecast naar java.lang.Long

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



  1. dynamische linker directe oproepsegmentatiefout bij het uitvoeren van een app die is gecompileerd met aangepaste gcc

  2. MongoDB - Java | Hoe de verbinding te beheren

  3. Mooie afdruk in MongoDB-shell als standaard

  4. MongoDB-aggregatie:verschillende velden tellen