greenDAO 更新和 updateInTx 不工作

greenDAO update and updateInTx not working

我正在为我的一个项目使用 greenDAO 3.1。由于我需要我的 ID 为 UUID,因此我决定将其存储为 ByteArray。现在的问题是我无法使用 updateupdateInTx 方法更新我的实体,我必须使用 insertOrReplaceinsertOrReplaceInTx 方法。

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

找了很久,找到了原因。

由于您无法在 sqlite 中查询 BLOB 类型,并且由于 update 方法在 WHERE 子句中使用 id 条件,因此 update 方法找不到我正在寻找的记录。另一方面,当我使用 insertOrReplace 方法之一时,由于 id 字段是唯一的,它不能将冗余 id 插入到 table 并且它完全取代了旧的记录我要更新的那个。因此,update 方法没有问题,真正的问题是将 ByteArray 用作 id.

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