0

在我更新对象后,我正在尝试从我的 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();
     }

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

4

1 回答 1

1

正如@dragonx 在评论中指出的那样,这是由于HRD 的最终一致性而发生的。

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

所以,如果你put()再马上get(),你会得到一致的数据,因为get()不依赖索引来检索实体。

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

于 2012-09-14T07:30:37.403 回答