0

我将 greenDAO 3.1 用于我的一个项目。因为我需要我的 id,所以UUID我决定将它存储为ByteArray. 现在的问题是我无法使用 or 方法更新我的实体updateupdateInTx我必须使用insertOrReplaceorinsertOrReplaceInTx方法。

谁能告诉我发生了什么,为什么我不能使用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
4

1 回答 1

1

经过大量的搜索和麻烦,我找到了原因。

由于您无法查询BLOB类型,sqlite并且由于update方法使用条件而不是idinWHERE子句,因此该update方法将找不到我要查找的记录。另一方面,当我使用其中一种insertOrReplace方法时,由于该id字段是唯一的,因此它无法id向表中插入冗余,并且它完全用我要更新的记录替换旧记录。所以,方法没有问题update,真正的问题是使用ByteArrayas id

同样的原因,我在选择使用load方法时也遇到了错误。

于 2017-01-22T23:18:48.753 回答