【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();

上一篇:spring


下一篇:mybaits知识点