【问题标题】:Issue with using the Google Datastore query console使用 Google Datastore 查询控制台的问题
【发布时间】:2014-12-01 02:30:48
【问题描述】:

我一直在使用 appengine 实现应用程序,并且也在使用 JDO。

在我的一个实体类中,我有一个 int 属性:

@Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
@Persistent
int numberToStore;

我能够毫无问题地存储实体并访问此属性。

但是,我决定使用数据存储查询控制台并将 numberToStore 属性的值从 4 更新为 5。控制台“编辑实体”屏幕中的类型一直是“A 数字”。 现在,每当我尝试从数据存储区访问实体时,我的日志中都会出现以下异常:

com.google.api.server.spi.SystemService invokeServiceMethod: cause={0} java.lang.ClassCastException: java.lang.Long 无法转换为 java.lang.Double 在 com.google.appengine.datanucleus.TypeConversionUtils$5.apply(TypeConversionUtils.java:121) 在 com.google.appengine.datanucleus.TypeConversionUtils$5.apply(TypeConversionUtils.java:119)

为什么会出现这个问题?从管理控制台更新实体属性值是否会导致属性的基础类型发生更改。 另外,我现在如何撤消对实体中此特定属性的这种类型更改。

【问题讨论】:

  • 这看起来可能是新数据存储查看器的问题。您能否确认您从console.developers.google.com 下的页面编辑了实体?
  • 是的,我从 console.developers.google.com 下的页面编辑了实体

标签: google-app-engine google-cloud-endpoints google-cloud-datastore datanucleus


【解决方案1】:

如果您在值中包含小数点(例如 5.0 而不是 5),它将被视为 float

或者,您可以使用 App Engine 管理控制台中的数据存储区查看器(https://appengine.google.com -> 数据存储区查看器)将值的类型改回浮点数。

请注意,更改属性类型需要两次保存:一次将属性类型设置为null,一次将其更改为float

【讨论】:

  • 感谢您的评论埃德
猜你喜欢
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 2023-03-12
  • 1970-01-01
  • 2014-10-23
相关资源
最近更新 更多