我在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会返回正确的数据,但是这些数据经常被提取,所以我想保留它.
谢谢
这是预期的行为吗?
不幸的是,是的.如果您已使用更新对象,dao.update(...);则缓存将知道该对象需要刷新.通过使用对UpdateBuilder表进行批量更改,缓存无法知道哪些对象受到影响.
在UpdateBuilder完成调用后,您需要清除缓存.
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |