GreenDao,禁用内部缓存get()

时间:2013-10-13 12:02:32

标签: android greendao

我使用GreenDao并创建一个核心功能,帮助您更新实体的某些值,如果实体不在数据库中,那么它也会插入它。问题是我总是得到实体的缓存副本,我知道GreenDao管理一些简单的缓存,我希望能够绕过它。有谁知道我怎么能直接从数据库查询?

这不起作用

.Dao().queryBuilder().where(comDao.Properties.Id.eq(id)).build().listLazyUncached();

1 个答案:

答案 0 :(得分:0)

GreenDao确实在其daoCore.jar源中具有内部缓存机制。

您可以通过从缓存中搜索put()和get()实体的代码来轻松禁用缓存。

 which is a: HashMap<? extends AbstractDao>.

然后生成MyDaoCore.jar并将其添加到您的项目中。

其次,为了更新或插入实体(不完全替换它),您需要实现以下伪代码。对不起,我没有添加实际的代码,我很久以前就解决了。

public void insertOrUpdate(List<? extends AbstractDao> entities){
    List<Entity> toInsert;
    List<Entity> toUpdate;

    for (Entity e : entities) 
    {
       if( e.inDatabase() )
            toUpdate.add(e);
       else 
            toInsert.add(e);
    }
    Dao.updateAll(toUpdate);
    Dao.insertAll(toInsert);
}

编辑1: 您可以使用IN语句,以便只在一个查询中获取实体的所有ID,如下所示:

.where(Dao.Properties.Id.in(ids)).build().list();