在更新对象后,我尝试从我的 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/