I have been implementing an app using appengine and am also using JDO.
In one of my entity classes I have a int property:
@Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
@Persistent
int numberToStore;
I was able to store the entity and access this property without any issues.
However, I decided to use the datastore query console and update the value of the numberToStore property from 4 to 5. The type in the "Edit Entity" screen of the console has always been "A number". I now get the following exception in my log whenever I try to access the entity from the datastore:
com.google.api.server.spi.SystemService invokeServiceMethod: cause={0} java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Double at com.google.appengine.datanucleus.TypeConversionUtils$5.apply(TypeConversionUtils.java:121) at com.google.appengine.datanucleus.TypeConversionUtils$5.apply(TypeConversionUtils.java:119)
Why is this issue occurring? Does updating the entity property value from the admin console cause the underlying type of the property to change. Also how can I now undo this type change to this specific property in the entity.
If you include a decimal point in the value (e.g.
5.0instead of5), it will be treated as afloat.Alternatively, you can use the Datastore Viewer available in the App Engine Admin Console (https://appengine.google.com -> Datastore Viewer) to change the type of the value back to a float.
Note that changing the type of a property requires two saves: once to set the property type to
nulland once to change it tofloat.