android - Ormlite ObjectCache 返回旧数据

标签 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();
    }
}

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

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 确实会返回正确的数据,但该数据的获取非常频繁,因此我想保留它。

谢谢

最佳答案

Is this the expected behavior?

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

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

关于android - Ormlite ObjectCache 返回旧数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14722818/

相关文章:

android - 如何在不中断 native 进程的情况下创建拦截 SMS 的服务

android - 在 Android 中检测蓝牙 Le 设备

android - 启用/禁用分组数据的使用

java - 如何查找 Activity 应用程序名称?

java - ORMlite,如果我*删除*注释会更快吗?

Android 周期性工作对打瞌睡模式和应用待机友好

java - 如何在没有 queryBuilder 的情况下定义 ORMLite 中的位置

java - 使用外国集合字段创建表

javafx StringConverter 最后一个对象

android - ForeignCollection 未使用查询生成器加载