在我更新对象后,我试图从我的appengine网络应用中获取更新的对象列表。
如果我在控制台中查看,在更新操作之后,我看到实体有新值,但是当我要求对象列表时,由于更新从未发生过,因此它带有旧值
我的更新实施是
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();
}
更新,合并方法或数据存储区是否存在使用此操作后无法刷新的特殊缓存的问题。请帮忙。感谢
答案 0 :(得分:1)
正如@dragonx在评论中指出的那样,这是由eventual consistency of HRD引起的。
当实体更新时,当实体数据被持久化但在构建所有相关索引之前,对put(..)
的调用将立即返回。
因此,如果您put()
然后立即get()
,您将获得一致的数据,因为get()
不依赖索引来检索实体。
但是,如果您put()
然后立即query()
,您可能无法获得更新的数据,因为查询依赖于索引,并且仍在构建插入/更新实体的索引条目。