greenDAO 更新和 updateInTx 不工作
greenDAO update and updateInTx not working
我正在为我的一个项目使用 greenDAO 3.1。由于我需要我的 ID 为 UUID
,因此我决定将其存储为 ByteArray
。现在的问题是我无法使用 update
或 updateInTx
方法更新我的实体,我必须使用 insertOrReplace
或 insertOrReplaceInTx
方法。
谁能告诉我发生了什么以及为什么我不能使用 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
方法选择时也遇到了错误。
我正在为我的一个项目使用 greenDAO 3.1。由于我需要我的 ID 为 UUID
,因此我决定将其存储为 ByteArray
。现在的问题是我无法使用 update
或 updateInTx
方法更新我的实体,我必须使用 insertOrReplace
或 insertOrReplaceInTx
方法。
谁能告诉我发生了什么以及为什么我不能使用 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
方法选择时也遇到了错误。