Appengine无法从数据存储中检索实体

时间:2013-03-29 15:42:33

标签: java google-app-engine

我得到了所有设置的appengine,它在我的本地主机上工作,我打电话

Entity greeting3 = new Entity(KeyFactory.createKey("World", "world3"));
greeting3.setProperty("raw", "2.2 # # # .");
datastore.put(greeting3);

添加我的实体,我可以在控制台中看到它们。然后我用

Query q = new Query("World");
PreparedQuery pq = datastore.prepare(q);
for (Entity result : pq.asIterable()) {
    resp.getWriter().println(result);
}

检索实体。它在localhost上工作得很好,但在服务器上我只是无法接收所有添加实体的列表。使用第一个代码确实可以添加它们。我也用

e = datastore.get(KeyFactory.createKey("World", req.getParameter(k)));
resp.getWriter().println(e.getProperty("raw"));

并且在localhost上它也可以工作,但是在互联网上,它会抛出“没有实体发现异常”。我已经尝试手动添加数据存储索引,但它没有帮助。 我一整天都在工作,现在真让我心烦意乱:(我也很确定它昨天有效... 请帮忙 感谢

2 个答案:

答案 0 :(得分:0)

如果在将实体放入数据存储区后很快运行查询,则可能是因为应用引擎数据存储区不是“immediately consistent”。这是“eventually consistent

您可以在运行查询之前等待几秒钟(可能是10?)进行测试。

如果这是错误,那么您应该查看docs

中的应用引擎数据存储区概述

答案 1 :(得分:0)

我也经历过这一点,如果不是req.getParameter(k)不是你预期的其他东西,那么你只需要再次运行查询。数据存储并不是很快,这就是Memcache的原因。

如果您希望应用程序立即提供数据,则必须使用Memcache API“缓存”它。