sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB:försöker läsa Long från JSON gör att java.lang.Integer inte kan castas till java.lang.Long

Mongo Java-drivrutinen har fastställt att värdet på serial kan 'passas' i en INT32 så den behandlar den som sådan. När du anropar doc.getLong() du ber föraren att casta sitt heltal till ett långt, därav klassens cast-undantag. Om till exempel värdet på serial var 2147483648 (dvs det maximala heltalsvärdet + 1) då skulle Mongo Java-drivrutinen anse att det är en INT64 och du kan sedan säkert anropa doc.getLong() .

Så eftersom (a) du har modellerat detta attribut som en Long i din klassmodell och (b) inte alla kvarstående värden av detta attribut kräver lagring som en INT64 ... du måste vara känslig för dess beständiga typ när du konverterar den till en lång.

Hur? Tja, så länge som serial attributet kvarstår som något slags nummer (t.ex. INT32 , INT64 ) sedan detta samtal ...

doc.get(DBConstants.SERIAL)

... kommer alltid att returnera ett objekt som är någon underklass av java.lang.Number och castar därför till Number och med longValue() kommer att fungera.

Till exempel:

serial = ((Number) doc.get(DBConstants.SERIAL)).longValue()



  1. Importera data till MongoDB från JSON-fil med Java

  2. Mongo inbäddad dokumentfråga

  3. Lagra en dataURL i MongoDB för att komma åt den via lokal URL (JS)

  4. AttributeError:'tuple'-objektet har inget attribut 'insert'