【Android】【GreenDao】GreenDao缓存机制中隐藏的炸弹
作者:互联网
一般用法
DaoSession session = master.newSession();
List<Track> tracks = dao.queryRaw("where track_id = ?", trackId);
潜在隐患
如果我们连续执行两次query的话,中间没有update等操作的话,query返回的会是相同的对象
即GreenDao默认使用了缓存机制,第二次查询,还是会返回第一次查询缓存的结果
如果我们在两次查询之间,把对象交给了其它代码处理,改变了对象的某些字段
即使我们没有将修改保存到数据库,再查询时,返回的字段还是被修改后的,因为返回的是同样的对象
所以在开启缓存的情况下,不能随意改变query结果中对象的数值,否则会引发未知的错误
解决方法
但是有些时候,我们就是要拿这些对象,去做其它运算
这时候我们就要通过正规方法去解决了,即关闭缓存机制
有两种方法可以关闭缓存机制,一种是默认全局关闭,一种是单次查询后,解除缓存关联
DaoSession session = master.newSession(IdentityScopeType.None);
List<Track> tracks = dao.queryRaw("where track_id = ?", trackId);
dao.detachAll();
标签:dao,缓存,对象,GreenDao,查询,query,Android 来源: https://blog.csdn.net/u013718730/article/details/118705735