【问题标题】:Ormlite ObjectCache returning old dataOrmlite ObjectCache 返回旧数据
【发布时间】:2013-02-07 00:01:03
【问题描述】:

我在 Android 上使用 Ormlite 并启用了 ObjectCache,在使用 UpdateBuilder 和 ColumnExpression 更新表后,我可以取回旧数据。我已通读该文档,并没有警告不要在启用缓存的情况下使用 UpdateBuilder。

设置表最多应该只有 1-5 行。 updateColumnExpression 似乎是一种只允许其中一行为真的简单方法。

这是预期的行为吗?

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 确实会返回正确的数据,但此数据的获取频率很高,所以我想保留它。

谢谢

【问题讨论】:

    标签: android ormlite


    【解决方案1】:

    这是预期的行为吗?

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

    在您对UpdateBuilder 的调用结束后,您需要清除缓存。

    【讨论】:

    • 清除缓存有效,感谢您的快速回复。在 ORM 上的出色工作,我非常喜欢。
    猜你喜欢
    • 2011-02-13
    • 2020-07-05
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2012-01-31
    • 1970-01-01
    相关资源
    最近更新 更多