2012-09-13 21 views
0

我想從我的AppEngine上的web應用程序獲取更新的對象的名單,之後我更新的對象。如何使用java將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

您是否閱讀過最終的一致性文檔? – dragonx

回答

1

正如@dragonx在評論中指出的那樣,這是由於eventual consistency of HRD造成的。

當實體被更新,調用put(..)當實體數據會持久,但所有相關的指標都是建立之前,將立即返回。

所以,如果你put(),然後立即get(),你會得到一致的數據,如get()不依賴於索引檢索實體。

但是,如果您put(),然後立即query(),您可能無法獲取更新的數據,因爲查詢依賴索引和插入/更新實體的索引條目仍在構建。

相關問題