我在 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/