2017-01-21 58 views
0

我使用greenDAO 3.1作爲我的一個項目。由於我需要我的ID爲UUID我決定將其存儲爲ByteArray。現在的問題是我無法使用updateupdateInTx方法更新我的實體,我必須使用insertOrReplaceinsertOrReplaceInTx方法。greenDAO更新和updateInTx不工作

有人可以告訴我發生了什麼,爲什麼我不能使用update方法更新?

使用insertOrReplace方法代替update方法有什麼不足嗎?

這是我Entity的架構代碼:

Entity book = schema.addEntity("Book"); 

book.addByteArrayProperty("id").columnName("_id").primaryKey(); 
book.addStringProperty("title"); 
book.addByteProperty("edition"); 
book.addStringProperty("authors"); 
book.addStringProperty("desc"); 
book.addStringProperty("pic"); 

這是我的更新代碼:

BookDao bookDao = daoSession.getBookDao(); 

List<Book> books = bookDao.loadAll(); 
for (Book book : books) 
    book.setDesc("It doesn't really matter!"); 

bookDao.updateInTx(books); //This isn't working 

回答

1

很多搜​​索後和麻煩我找到了原因。

因爲你不能在sqlite查詢BLOB型和自update方法WHERE子句中使用的條件在id,該update方法不會找到我要找的記錄。另一方面,當我使用insertOrReplace方法之一時,由於id字段是唯一的,因此它不能將冗餘id插入到表中,並且它完全用我試圖更新的記錄替換舊記錄。所以,update方法沒有問題,真正的問題是使用ByteArray作爲id

出於同樣的原因,我在選擇使用load方法時也遇到錯誤。