2017-04-25 51 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); 
     }