【问题标题】:Entities returned by Projection Queries投影查询返回的实体
【发布时间】:2014-06-25 08:40:29
【问题描述】:

我正在设计一个应用程序,希望在其中使用投影查询从 App Engine 数据存储区检索实体对象,以节省延迟和成本。我对此有两个问题:

1) 如果在返回的实体上调用 Entity.getProperty(String propertyName) 方法,其中 propertyName 不对应于 Projection 选择的属性之一,返回值为 null 还是 Java 会抛出异常?实体文档没有说明如果 propertyName 不存在会发生什么。推论,未选择的属性是否不再存在于返回的实体中,或者它们只是没有分配或为它们分配空值?

2) 返回的截断实体的密钥是否与数据存储中实际存在的原始完整实体的密钥相同?据我了解,密钥是实体的种类、名称/id 属性和祖先路径的散列。 Name/id 似乎也是一个属性,所以如果不选择它,返回的 Entity 的 Key 是否与实际 Entity 的 Key 不同?

一旦我启动并运行,这些问题似乎很容易通过一些测试来回答,但我是 App Engine 的新手,仍然只是设计我的项目,所以我不会处于一个位置这样做了一段时间。希望有人已经知道答案。

【问题讨论】:

    标签: java google-app-engine google-cloud-datastore


    【解决方案1】:
    1. 如果实体中不存在属性,.getPropery() 将返回 null。不抛出异常。

    2. 如果投影查询中未命名某个属性,则检索到的实体不具有此属性,即使整个实体有。

    3. 投影查询中返回的实体的键与任何其他查询中的键相同。密钥是在实体首次插入数据存储区时创建的,之后不会更改。

    稍微解释一下。当您在数据存储中插入新实体时,数据存储会创建一个实体,分别为相应索引中的每个索引属性或属性组合(自定义索引)创建一个条目。投影查询只是索引属性的另一种组合。它直接从自己的索引中检索所需的所有数据,而不检索实体本身。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多