2013-10-13 56 views
1

我正在使用GreenDao並創建一個核心函數,可以幫助您更新實體的某些值,並且如果實體不在數據庫中,那麼它也會插入它。問題是我總是得到實體的緩存副本,我知道GreenDao管理一些簡單的緩存,我希望能夠繞過它。有誰知道我可以從數據庫中查詢嗎?GreenDao,禁用內部緩存獲取()

這不起作用

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

我有同樣的問題。你知道嗎? – FlavienBert

+0

是的,但很久以前,我已經創建了一個封閉的罐子。但我會用僞代碼 – Nativ

回答

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: 您可以使用的語句,以獲得一個實體的所有ID只在一個這樣的查詢:

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

發佈一個答案,我不明白。我需要做什麼來做到這一點? – FlavienBert