2017-01-21 6 views
0

Я использую greenDAO 3.1 для одного из моих проектов. Поскольку мне нужен мой идентификатор UUID Я решил сохранить его как ByteArray. Теперь проблема в том, что я не могу обновить свои объекты, используя метод update или updateInTx, и мне нужно использовать метод insertOrReplace или insertOrReplaceInTx.greenDAO update и updateInTx не работает

Может кто-нибудь сказать мне, что происходит, и почему я не могу обновить с помощью методов 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.

 Смежные вопросы

  • Нет связанных вопросов^_^