您当前的位置: 首页 >  缓存

命运之手

暂无认证

  • 0浏览

    0关注

    747博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Android】【GreenDao】GreenDao缓存机制中隐藏的炸弹

命运之手 发布时间:2021-07-13 17:25:30 ,浏览量:0

一般用法


	DaoSession session = master.newSession();
	List tracks = dao.queryRaw("where track_id = ?", trackId);

潜在隐患

如果我们连续执行两次query的话,中间没有update等操作的话,query返回的会是相同的对象

即GreenDao默认使用了缓存机制,第二次查询,还是会返回第一次查询缓存的结果

如果我们在两次查询之间,把对象交给了其它代码处理,改变了对象的某些字段

即使我们没有将修改保存到数据库,再查询时,返回的字段还是被修改后的,因为返回的是同样的对象

所以在开启缓存的情况下,不能随意改变query结果中对象的数值,否则会引发未知的错误

解决方法

但是有些时候,我们就是要拿这些对象,去做其它运算

这时候我们就要通过正规方法去解决了,即关闭缓存机制

有两种方法可以关闭缓存机制,一种是默认全局关闭,一种是单次查询后,解除缓存关联


	DaoSession session = master.newSession(IdentityScopeType.None);


	List tracks = dao.queryRaw("where track_id = ?", trackId);
	dao.detachAll();

关注
打赏
1654938663
查看更多评论
立即登录/注册

微信扫码登录

0.0712s