2017-04-25 4 views
0

Erstmalige Implementierung GreenDAO. Ich habe viele andere Fragen gelesen und ich fühle, dass ich ihnen alle gefolgt bin.GreenDAO respektiert nicht @Einzigartige Felder

Meine einfache Entity:

@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; 
} 

ich dann die Tabelle einfügen in mit searchTermDao.insertOrReplace(searchTerm). Das Problem ist, dass es mehrere Einträge speichert, wo die searchTerm genau das gleiche ist. Was mache ich falsch?

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; 
    } 

LÖSUNG:

Dank Luiz in den Kommentaren ich die Datenbank bei der Initialisierung nur aktualisiert:

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() nur benötigt, einmal aufgerufen werden.

+0

Verwenden Sie SQLite oder ORMLite oder etwas anderes? –

+0

Ich habe alles Standard beibehalten, also würde ich SQLite annehmen –

Antwort

0

Ich sah das gleiche Problem und nach der Überprüfung der Protokolle erkannte ich, dass die Datenbank nicht aktualisiert wurde, nachdem ich die Annotation @Unique angewendet habe.

Um dieses Problem zu beheben, versuchen Sie, die Datenbankversion innerhalb Ihrer Klasse zu erhöhen, die SQLiteOpenHelper erweitert und Ihre Tabelle innerhalb Ihrer onUpgrade()-Methode löschen.

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); 
     } 
Verwandte Themen