我正在使用GreenDao並創建一個核心函數,可以幫助您更新實體的某些值,並且如果實體不在數據庫中,那麼它也會插入它。問題是我總是得到實體的緩存副本,我知道GreenDao管理一些簡單的緩存,我希望能夠繞過它。有誰知道我可以從數據庫中查詢嗎?GreenDao,禁用內部緩存獲取()
這不起作用
.Dao().queryBuilder().where(comDao.Properties.Id.eq(id)).build().listLazyUncached();
我正在使用GreenDao並創建一個核心函數,可以幫助您更新實體的某些值,並且如果實體不在數據庫中,那麼它也會插入它。問題是我總是得到實體的緩存副本,我知道GreenDao管理一些簡單的緩存,我希望能夠繞過它。有誰知道我可以從數據庫中查詢嗎?GreenDao,禁用內部緩存獲取()
這不起作用
.Dao().queryBuilder().where(comDao.Properties.Id.eq(id)).build().listLazyUncached();
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();
發佈一個答案,我不明白。我需要做什麼來做到這一點? – FlavienBert
我有同樣的問題。你知道嗎? – FlavienBert
是的,但很久以前,我已經創建了一個封閉的罐子。但我會用僞代碼 – Nativ