java - 如何使用java从appengine数据存储中获取更新的对象集合?

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

在更新对象后,我尝试从我的 appengine Web 应用程序获取更新后的对象列表。

如果我查看控制台,更新操作后我会看到实体具有新值,但是当我询问对象列表时,它会带着旧值出现,因为更新从未发生

我的更新实现是

 public void update( final T entity ){
        entityManager.merge( entity );
        entityManager.flush();
     }

我的检索列表实现是

@SuppressWarnings("unchecked")
     @Transactional(readOnly = true)
     public List< T > findAll(){
        entityManager.flush();
        return entityManager.createQuery("select f from " + clazz.getName() + " as f").getResultList();
     }

更新、合并方法是否存在问题,或者数据存储是否使用任何在此操作后不会刷新的特殊缓存。请帮忙。谢谢

最佳答案

正如 @dragonx 在评论中指出的,发生这种情况是由于 eventual consistency of HRD .

更新实体时,对 put(..) 的调用将在实体数据持久化后立即返回,但在构建所有关联索引之前。

因此,如果您 put() 然后立即 get(),您将获得一致的数据,而 get() 则不会依靠索引来检索实体。

但是,如果您 put() 然后立即 query(),您可能无法获取更新的数据,因为查询依赖于插入/的索引和索引条目更新的实体仍在构建中。

关于java - 如何使用java从appengine数据存储中获取更新的对象集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12414975/

相关文章:

java - 在谷歌应用引擎数据存储中查询聚合 ("group by"的替代策略

html - 可以在没有域的情况下使用 Google Cloud 托管网站吗?

python - GAE 数据存储 : query a existing by user_id field

java - 用户总是需要按两次谷歌登录按钮

python - 在 App Engine 上安装 Sphinx - 可能吗?

google-app-engine - App Engine 域 CNAME 记录 - "ghs.google.com"或 "ghs.google.com."

java - org.glassfish.javaeetutorial 的不可解析父 POM :dukes-tutoring

Java:何时将服务器层组件作为守护程序 JAR 运行,何时使用 EAR

Java正则表达式匹配空行

java - 没有 web.xml 的基于注解的 Spring/JAX-RS 集成