我正在设计一个应用程序,我希望使用投影查询从App Engine数据存储中检索实体对象,以节省延迟和成本。我有两个问题:
1)如果在返回的Entity上调用Entity.getProperty(String propertyName)方法,其中propertyName与Projection选择的属性之一不对应,返回值是null还是Java会抛出异常?实体文档未指出如果propertyName不存在会发生什么。一个推论,返回的实体中不再存在未选择的属性,或者它们是否只是没有赋值或为它们分配空值?
2)返回的截断实体的密钥是否与实际位于数据存储区中的原始完整实体的密钥相同?根据我的理解,Key是实体的类型,名称/ id属性和祖先路径的哈希。名称/ ID也似乎是一个属性,所以如果没有选择它,返回的实体的密钥是否与实际实体的密钥不同?
一旦我启动并运行,这些问题似乎很容易通过一些测试回答,但我是App Engine的新手,我仍然只是设计我的项目,所以我不会处于有利位置这样做了一段时间。希望有人知道答案。
答案 0 :(得分:0)
如果实体中不存在属性,则.getPropery()将返回null。没有例外。
如果在投影查询中未命名属性,则即使完整实体执行了此操作,检索到的实体也不具有此属性。
投影查询中返回的实体的键与任何其他查询中的键相同。密钥是在实体首次插入数据存储区时创建的,之后不会更改。
一点解释。在数据存储区中插入新实体时,数据存储区会单独创建实体和,在相应的索引中为每个索引属性或属性组合(自定义索引)创建条目。投影查询只是索引属性的另一种组合。它直接从自己的索引中检索所需的所有数据,而无需检索实体本身。