greenDAO обновление и обновление InTx не работает
Я использую greenDAO 3.1 для одного из моих проектов. Так как мне нужен был мой идентификатор, чтобы быть 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
1 ответ
После долгих поисков и неприятностей я нашел причину.
Поскольку вы не можете запросить BLOB
введите sqlite
и с тех пор update
методы используют условие над id
в WHERE
оговорка update
Метод не найдет нужную мне запись. С другой стороны, когда я использую один из insertOrReplace
методы, так как id
поле уникально, оно не может вставлять лишние id
к таблице, и она полностью заменяет старую запись той, которую я пытаюсь обновить. Таким образом, не было никаких проблем с update
методы, настоящая проблема с использованием ByteArray
как id
,
По той же причине я также столкнулся с ошибкой при выборе с помощью load
метод.