![](/img/trans.png)
[英]Update field in an entity with updatable=false returns the entity with the field with the new value
[英]Adding a new field to an entity
我創建了一個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”部分,但如何解決這個問題? 我希望它為空。
嘗試將默認年齡值設置為 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"
);
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.