2013-02-06 98 views
2

我在Android上使用Ormlite並啓用了ObjectCache後,使用UpdateBuilder和ColumnExpression更新表後返回舊數據。我已經閱讀了文檔,並沒有警告在啓用緩存的情況下使用UpdateBuilder。Ormlite ObjectCache返回舊數據

設置表最多隻有1-5行。 updateColumnExpression看起來像一個簡單的方法,只允許其中一個行爲true。

這是預期的行爲?

public void setActiveSetting(String id) 
{ 
    try { 
     UpdateBuilder<Settings, Integer> updateBuilder2 = getHelper().getSettingsDao().updateBuilder(); 
     updateBuilder2.updateColumnExpression("active", "id = " + id); 
     updateBuilder2.update(); 
    } catch (SQLException e){ 
     e.printStackTrace(); 
    } 
} 

這是返回過時的數據呼叫:

public List<Settings> getSettings() 
{ 
    List<Settings> settings = null; 
    try { 
     settings = getHelper().getSettingsDao().queryForAll(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    return settings; 
} 

而設置DAO:

public Dao<Settings, Integer> getSettingsDao() 
{ 
    if (null == settingsDao) { 
     try { 
      settingsDao = getDao(Settings.class); 
      settingsDao.setObjectCache(true); 
     } catch (java.sql.SQLException e) { 
      e.printStackTrace(); 
     } 
    } 
    return settingsDao; 
} 

禁用ObjectCache不會返回正確的數據,但這個數據是經常提取,所以我想保留它。

感謝

回答

5

這是預期的行爲?

不幸的是,是的。如果您使用dao.update(...);更新了對象,則緩存將知道該對象需要刷新。通過使用UpdateBuilder對錶格進行大量更改,緩存無法知道哪些對象受到影響。

在您致電UpdateBuilder完成後,您需要清除緩存。

+0

清除緩存工作,感謝您的快速回復。在ORM上做的很棒,我非常喜歡。 –