2017-01-21 2 views
0

Ich benutze greenDAO 3.1 für eines meiner Projekte. Da ich meine ID UUID brauchte, habe ich mich entschieden, sie als ByteArray zu speichern. Nun ist das Problem, ich kann meine Entitäten nicht mit update oder updateInTx Methode aktualisieren und ich muss insertOrReplace oder insertOrReplaceInTx Methode verwenden.greenDAO update und updateInTx funktioniert nicht

Kann mir jemand sagen, was los ist und warum kann ich nicht mit update Methoden aktualisieren?

Gibt es irgendwelche Nachteile der Verwendung von insertOrReplace Methoden anstelle von update Methoden?

Das ist mein Entity ‚s Schema Code:

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"); 

Und hier ist mein Update-Code:

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 

Antwort

1

Nach viel suchen und Mühe, die ich den Grund gefunden.

Da Sie nicht BLOB Typen in sqlite und da update Methoden eine Bedingung verwenden, um über id in WHERE Klausel abfragen können, die update Methode wird die Aufzeichnung Ich suche nicht finden. Auf der anderen Seite, wenn ich eine der insertOrReplace Methoden verwende, da das id Feld eindeutig ist, kann es nicht redundant id in die Tabelle einfügen und es ersetzt den alten Datensatz vollständig mit dem, den ich versuche zu aktualisieren. Also, es gab kein Problem mit update Methoden, das eigentliche Problem ist mit ByteArray als id.

Aus dem gleichen Grund, habe ich auch einen Fehler bei der Auswahl mit load Methode gefunden.