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 метод.

Другие вопросы по тегам