sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB:pokus o čtení Long z JSON způsobí, že java.lang.Integer nelze přetypovat na java.lang.Long

Ovladač Mongo Java určil, že hodnota serial může se „vejít“ do INT32, takže s ním tak zachází. Když zavoláte doc.getLong() žádáte řidiče, aby přehodil své celé číslo na Long, proto výjimka přetypování třídy. Pokud je například hodnota serial byl 2147483648 (tj. maximální celočíselná hodnota + 1), pak by to ovladač Mongo Java považoval za INT64 a vy byste pak mohli bezpečně vyvolat doc.getLong() .

Takže od (a) jste tento atribut modelovali jako Long ve vašem modelu třídy a (b) ne každá trvalá hodnota tohoto atributu vyžaduje uložení jako INT64 ... při převodu na dlouhý musíte být citliví na jeho trvalý typ.

Jak? No, pokud serial atribut je zachován jako nějaký druh čísla (např. INT32 , INT64 ), pak toto volání ...

doc.get(DBConstants.SERIAL)

... vždy vrátí objekt, který je nějakou podtřídou java.lang.Number a proto přetypování na Number a pomocí longValue() bude fungovat.

Například:

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



  1. Mongodb havaroval s neplatným přístupem na adrese - signál chyby segmentace 11 - verze 2.6

  2. Vyhledávání míst pomocí Google Maps API pro Android

  3. Zásuvka modulu nebyla nalezena lua

  4. agregace mongodb s $project pro podmíněné vyloučení pole