Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android greenDAO更新和updateInTx不工作_Android_Greendao_Greendao3 - Fatal编程技术网

Android greenDAO更新和updateInTx不工作

Android greenDAO更新和updateInTx不工作,android,greendao,greendao3,Android,Greendao,Greendao3,我在我的一个项目中使用Greendao3.1。因为我需要我的id是UUID,所以我决定将它存储为ByteArray。现在的问题是,我无法使用update或updateInTx方法更新实体,我必须使用insertoreplace或insertoreplaceintx方法 有谁能告诉我发生了什么,为什么我不能使用update方法进行更新 使用insertOrReplace方法而不是update方法有什么缺点吗 这是我的实体的架构代码: Entity book = schema.addEntity("

我在我的一个项目中使用Greendao3.1。因为我需要我的id是
UUID
,所以我决定将它存储为
ByteArray
。现在的问题是,我无法使用
update
updateInTx
方法更新实体,我必须使用
insertoreplace
insertoreplaceintx
方法

有谁能告诉我发生了什么,为什么我不能使用
update
方法进行更新

使用
insertOrReplace
方法而不是
update
方法有什么缺点吗

这是我的
实体的架构代码:

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
BookDao BookDao=daoSession.getBookDao();
List books=bookDao.loadAll();
用于(书籍:书籍)
setDesc(“这真的没关系!”);
bookDao.updateInTx(books)//这不管用

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

由于无法查询
BLOB
sqlite
中键入,并且
update
方法在
WHERE
子句中使用了
id
上的条件,因此
update
方法将找不到我要查找的记录。另一方面,当我使用一种
insertOrReplace
方法时,由于
id
字段是唯一的,它不能将冗余的
id
插入到表中,它会用我试图更新的记录完全替换旧记录。因此,
update
方法没有问题,真正的问题是使用
ByteArray
作为
id

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