MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB:опит за четене на Long от JSON причинява java.lang.Integer не може да бъде прехвърлен към java.lang.Long

Драйверът на Mongo Java е определил, че стойността на serial може да се "побере" в INT32, така че го третира като такъв. Когато извикате doc.getLong() вие молите драйвера да преобразува своето цяло число към Long, оттук и изключението за преобразуване на класа. Ако, например, стойността на serial беше 2147483648 (т.е. максималната стойност на цяло число + 1), тогава драйверът на Mongo Java ще приеме, че това е INT64 и вие можете безопасно да извикате doc.getLong() .

Така че, тъй като (a) сте моделирали този атрибут като Long във вашия модел на клас и (б) не всяка персистирана стойност на този атрибут изисква съхранение като INT64 ... трябва да сте чувствителни към неговия постоянен тип, когато го конвертирате в Long.

как? Е, стига serial атрибут се запазва като някакъв вид число (напр. INT32 , INT64 ), тогава това обаждане ...

doc.get(DBConstants.SERIAL)

... винаги ще връща обект, който е някакъв подклас на java.lang.Number и следователно кастинг към Number и използвайки longValue() ще работи.

Например:

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да използвам guid в заявка за обвивка на mongodb

  2. OpenSSL не е намерен на MacOS Sierra

  3. Как внедрявате автоматично увеличаващ се първичен идентификатор в MongoDB?

  4. MongoDB:Проблеми при използване на $concat за актуализиране на стойността на поле

  5. 2 начина за добавяне на стойност към масив в MongoDB