GreenDAO不尊重@Unique字段

时间:2017-04-25 18:03:01

标签: android

首次实施GreenDAO。一直在阅读很多其他问题,我觉得我已经完成了所有这些问题。

我的简单实体:

@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:

感谢评论中的 Luiz ,我刚刚在初始化时升级了数据库:

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()只需要调用一次。

1 个答案:

答案 0 :(得分: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);
        }