2017-01-21 12 views
0

私のプロジェクトの1つにgreenDAO 3.1が使用されています。 UUIDに私のIDが必要なので、私はそれをByteArrayとして保存することに決めました。今問題はupdateまたはupdateInTxメソッドを使用してエンティティを更新できないため、insertOrReplaceまたはinsertOrReplaceInTxメソッドを使用する必要があります。greenDAOアップデートとupdateInTxが動作しない

何が起こっているのか誰に教えてもらえますか?updateメソッドを使用して更新できないのはなぜですか?

updateメソッドの代わりにinsertOrReplaceメソッドを使用することに欠点はありますか?

これは私の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

検索とトラブルの多くの後、私はその理由を見つけました。

あなたはsqliteBLOBタイプを照会することはできませんのでとupdate方法はWHERE句でid上の条件を使用しているため、update方法は、私が探しているレコードを見つけることができません。一方insertOrReplaceのいずれかの方法を使用すると、idフィールドが一意であるため、テーブルに冗長idを挿入することはできず、古いレコードを完全に置き換えようとしています。したがって、updateメソッドで問題はありませんでしたが、実際の問題はByteArrayidとして使用することです。

loadメソッドを使用すると、同じ理由でエラーが発生しました。

関連する問題