Ormlite ObjectCache返回旧数据

Gar*_*Bak 2 android ormlite

我在Android上使用Ormlite并启用了ObjectCache,在使用UpdateBuilder和ColumnExpression更新表后,我恢复了旧数据.我已经阅读了文档,并没有警告不要在启用缓存的情况下使用UpdateBuilder.

设置表最多只能有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();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是返回过时数据的调用:

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

并设置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;
}
Run Code Online (Sandbox Code Playgroud)

禁用ObjectCache会返回正确的数据,但是这些数据经常被提取,​​所以我想保留它.

谢谢

Gra*_*ray 5

这是预期的行为吗?

不幸的是,是的.如果您已使用更新对象,dao.update(...);则缓存将知道该对象需要刷新.通过使用对UpdateBuilder表进行批量更改,缓存无法知道哪些对象受到影响.

UpdateBuilder完成调用后,您需要清除缓存.