Добавление нового поля в сущность - PullRequest
0 голосов
/ 20 марта 2020

Я создал director класс

@Entity(tableName = "director")
public class Director {

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "did")
    public int id;

    @ColumnInfo(name = "full_name")
    @NonNull
    public String fullName;


    public Director(@NonNull String fullName) {
        this.fullName = fullName;
    }
}

Я решил добавить новый столбец, добавив метод миграции и добавив поле к классу

@Entity(tableName = "director")
public class Director {

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "did")
    public int id;

    @ColumnInfo(name = "full_name")
    @NonNull
    public String fullName;

    @ColumnInfo(name = "age")
    public int age;

    public Director(@NonNull String fullName) {
        this.fullName = fullName;
    }
}

метод

static final Migration MIGRATION_1_2 = new Migration(1, 2) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {

        String query = "ALTER TABLE 'director' ADD COLUMN 'age' INTEGER ";

        database.execSQL(query);

    }
};

Когда я выполняю код, я получаю эту ошибку

Caused by: java.lang.IllegalStateException: Migration didn't properly handle

И он говорит, что ожидал

age=Column{name='year', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, 

И нашел

age=Column{name='year', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='null'}, 

Я вижу, что проблема в части "notnull", но как это исправить? Я хочу, чтобы оно было нулевым.

1 Ответ

1 голос
/ 20 марта 2020

Попробуйте установить значение по умолчанию для возраста 0

 static final Migration MIGRATION_1_2 = new Migration(1, 2) {

  @Override
  public void migrate(SupportSQLiteDatabase database) {
    database.execSQL(
      "ALTER TABLE 'director' ADD COLUMN 'age' INTEGER NOT NULL DEFAULT 0"
     );
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...