我正在使用带有Objectify和RequestFactory的App Engine(Java)。
我的实体存储了一些字段和嵌入式实体ArrayList。嵌入式实体有自己的几个字段。因此,示例实体可能如下所示:
name: Bob
email: bob@example.com
todo.description: ["Pick up food", "Wash car", "Exercise"]
todo.importance: [1, 5, 3]
我有一个DataGrid,它可以提取嵌入的实体列表并显示它。如果单击某个按钮,则会将新项目添加到嵌入式实体中,该实体将保持不变并刷新数据网格。
问题在于它不是高度一致的。大多数情况下,DataGrid会使用最新数据成功刷新,但有时它只显示旧数据,您必须刷新页面才能显示新结果。
据我所知,App Engine最终只与不在同一实体组中的实体保持一致,但据我所知,嵌入式实体最终只是包含它的实体上的更多字段,即那里只涉及一个实体,一切都应该高度一致。
我错了吗?
答案 0 :(得分:2)
http://code.google.com/p/googleappengine/issues/detail?id=6326
这是我创建的问题的一个主题。首先,确保你打开STRONG一致性(我相信最终是默认的)。
第二 - 从那个帖子,这是一个重要的注释:
强一致性标志意味着对于e get by key或实体 组查询,您将与这些约束强烈一致, 但是,“全局”(实体无根)查询仍将始终如一 最终一致。将标志设置为EVENTUAL一致性时, 所有查询将最终表现出一致的行为。
因此,如果您正在进行跨实体查询,则无论您是否将STRONG设置为默认值,它都可能是EVENTUAL一致的。因此,尝试启用STRONG一致性,然后通过关键查询对渲染视图所需的所有实体进行单一获取,而不是单个跨实体查询。
答案 1 :(得分:1)
您还可以发出祖先查询,您的查询将非常一致