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