2017-04-25 13 views
0

GreenDAOを初めて実装しました。他の多くの質問を読んで、私はそれらのすべてをフォローしていると感じています。GreenDAOは@Uniqueフィールドを尊重していません

私の簡単なエンティティ:

@Entity(
     indexes = { 
       @Index(value = "searchTerm", unique = true) 
     } 
) 
public class SearchTerm 
{ 
    @Id private Long id; 
    // @Unique have also tried this 
    // @Index(unique = true) have also tried this 
    private String searchTerm; 
    private Date date; 
} 

私はその後searchTermDao.insertOrReplace(searchTerm)を使用してテーブルに挿入します。問題は、searchTermがまったく同じ複数のエントリを格納することです。私は間違って何をしていますか?

private SearchViewQueryTextEvent storeSearchTerm(SearchViewQueryTextEvent queryTextEvent) 
    { 
     SearchTerm searchTerm = new SearchTerm(); 
     searchTerm.setSearchTerm(queryTextEvent.queryText().toString()); 
     searchTerm.setDate(new Date()); 
     searchTermDao.insertOrReplace(searchTerm); 
     Log.d(TAG, "Stored new search term: " + searchTerm.getSearchTerm()); 
     return queryTextEvent; 
    } 

SOLUTION:一度だけ呼び出されるために必要な

DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(mContext, "search-db"); 
helper.onUpgrade(helper.getWritableDatabase(), 1, 2); 
Database db = helper.getWritableDb(); 
return new DaoMaster(db).newSession(); 

.onUpgrade():私はちょうど初期化でデータベースをアップグレードしたコメントでルイスから

感謝。

+0

SQLiteまたはORMLiteなどを使用していますか? –

+0

私はすべてのデフォルトを維持しているので、私はSQLite –

答えて

0

私は同じ問題に直面し、ログを見直した後、私は@Uniqueの注釈を適用した後にデータベースが更新されていないことに気付きました。

この問題を解決するには、SQLiteOpenHelperに拡張されたクラス内のデータベースバージョンを増やして、onUpgrade()メソッド内にテーブルをドロップしてください。

private static final int VERSION = 2; //+ one number 

    @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      db.execSQL("DROP TABLE IF EXISTS" + table_name); 
      onCreate(db); 
     } 
関連する問題