【发布时间】:2015-04-01 18:25:49
【问题描述】:
我正在使用 Google App Engine 并尝试从数据存储区查询/提取数据。我已经学习了近 20 个不同的教程,但没有任何运气。
这是我的数据存储区的图片以及我存储在其中的相应示例数据:
这是我必须提取数据的一些代码:
//To obtain the keys
final DatastoreService dss=DatastoreServiceFactory.getDatastoreService();
final Query query=new Query("Coupon");
List<Key> keys = new ArrayList<Key>();
//Put the keys into a list for iteration
for (final Entity entity : dss.prepare(query).asIterable(FetchOptions.Builder.withLimit(100000))) {
keys.add(entity.getKey());
}
try {
for (int i = 0; i < keys.size(); i++){
Entity myEntity = new Entity("Coupon", keys.get(i));
System.out.println("Size of the Keys array = " + keys.size());
String description = (String) myEntity.getProperty("desc");
String endDate = (String) myEntity.getProperty("endDate");
System.out.println("Description = " + description);
System.out.println("End Date: " + endDate);
//Map here is empty...
Map<String, Object> test = myEntity.getProperties();
System.out.println("MAP SIZE = " + test.size());
}
} catch (Exception e){
e.printStackTrace();
}
**OUPUT:**
Size of the Keys array = 2
Description = null
End date = null
MAP SIZE = 0
我不知道为什么描述和结束日期为空。它显然拉入了正确的实体,因为尺寸显示为 2,与所示图片匹配。另外,当我打印出钥匙时,它也匹配
(类似这样:对于 keys.get(i).toString(); -- 实体 [!global:Coupon(123)/Coupon(no-id-yet)]: .或者:密钥字符串 = !global:Coupon(5730827476402176)
我已尽我所能遵循文档 (here) 和一些示例 (here),但我似乎无法弄清楚。有没有人有任何关于如何从实体获取属性而不返回 null 的建议或经验?
我已经完成了以下 Stackoverflow 问题,但没有成功,所以请不要用简单的重复问号来关闭它: 1)How do i get all child entities in Google App Engine (Low-level API) 2)Storing hierarchical data in Google App Engine Datastore? 3)How do you use list properties in Google App Engine datastore in Java? 4)Mass updates in Google App Engine Datastore 5)Checking if Entity exists in google app engine datastore..
【问题讨论】:
-
cloud.google.com/appengine/docs/java/javadoc/com/google/…“正常方式”似乎是使用“getProperty”然后命名属性,而不是“getProperties”
-
确实你是对的,我的代码中的行:myEntity.getProperty("desc");正在尝试这样做,但正在返回 null。我尝试了 getProperties() 调用 Map
测试,但也没有运气。 -
哦,哇,我错过了那个。很抱歉:P 下次我会确保彻底阅读代码,而不是专注于一行。你什么时候放你的实体?我们可以完全排除最终的一致性吗?
-
我想我知道你在做什么。您正在执行查询以获取所有键,然后使用相同的键构建一个新实体(因此它是一个空实体),然后您询问该新实体的参数。您绝不会使用服务器返回的实体来询问。
-
Entity myEntity = new Entity("Coupon", keys.get(i));
标签: java google-app-engine entity google-cloud-datastore gql