GreenDao queryBuilder()。list()返回已删除的实体

时间:2014-04-10 17:42:45

标签: android caching orm greendao

我在我的应用程序中使用GreenDao,目前遇到一个有趣的问题。

首先,我删除了一个实体项“A”(ID = 1)并使用来自DaoSession的runInTx()在事务中运行它。

删除后,我的应用程序返回到项目列表,并且预计会发现我的项目已被删除。 然后我将新项目实体项“B”添加到DB中,当我再次使用EntityDao.QueryBuilder()返回列表时.list()我发现实体项“A”再次列出,而不是实体项“B” 。

当我检查数据库时,使用相同的ID = 1创建了实体项“B”。在我看来列出所有项目将返回缓存的实体。

删除后我执行了以下DaoSession.clear(),但它仍然导致缓存已删除的实体。

有人对这个问题有任何想法吗?

1 个答案:

答案 0 :(得分:1)

我找到了解决这个问题的方法。

问题是我在删除活动中是DaoSession.clear(),调用activity.finish()然后返回列表项活动。

这显然是活动管理问题,因为我设计了每个活动都有自己的DaoSession。 DaoSession的每个实例都将包含GreenDao对象的会话缓存。

可以阅读GreenDao会话缓存的更多信息here

因此解决方案是在删除活动完成后清除List Item活动的DaoSession。