sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB:forsøger at læse Long fra JSON forårsager, at java.lang.Integer ikke kan castes til java.lang.Long

Mongo Java-driveren har fastslået, at værdien af ​​serial kan 'passe' ind i en INT32, så den behandler den som sådan. Når du kalder doc.getLong() du beder chaufføren om at kaste sit heltal til et langt, deraf class cast-undtagelsen. Hvis f.eks. værdien af ​​serial var 2147483648 (dvs. den maksimale heltalværdi + 1) så ville Mongo Java-driveren anse det for at være en INT64, og du kan derefter trygt påkalde doc.getLong() .

Så da (a) du har modelleret denne attribut som en Long i din klassemodel og (b) ikke hver vedvarende værdi af denne attribut kræver lagring som en INT64 ... du skal være følsom over for dens vedvarende type, når du konverterer den til en Long.

Hvordan? Nå, så længe serial attribut bevares som en slags nummer (f.eks. INT32 , INT64 ) så dette kald ...

doc.get(DBConstants.SERIAL)

... vil altid returnere et objekt, som er en underklasse af java.lang.Number og derfor caster til Number og ved at bruge longValue() vil virke.

For eksempel:

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



  1. brygtjenester. Kan ikke starte service. get Bootstrap mislykkedes:5:Input/output fejl

  2. Kunne ikke indlæse c++ bson-udvidelsen ved at bruge ren JS-version

  3. Hvordan importerer man kun ikke-eksisterende dokumenter?

  4. Find 15 minutters data med ObjectID-feltet