我正在从SQLOpenHelper迁移我从Room继承到Room的应用程序,我遇到了匹配其中一个表的问题。
我有一个脚本
CREATE TABLE user_groups (
_id TEXT PRIMARY KEY,
is_default INTEGER DEFAULT 0 )
我的实体类看起来像这样
@Entity(tableName = "user_groups")
public class UserGroupModel {
@Primary Key
@NonNull
@ColumInfo(name = "_id")
private String rowId;
@ColumnInfo(name = "is_default")
private int isDefault;
..... constructor / getters ....
}
当我使用新数据库版本进行构建时,我收到迁移错误
IllegalStateException:迁移未正确处理user_groups
我在堆栈跟踪中看到的唯一不匹配是Room force基本类型为NOT NULL而我的旧脚本不是。
预期:
{name ='is_default',type ='INTEGER',affinity ='3',notNull = true,primaryKeyPosition = 0}
实测值:
{name ='is_default',type ='INTEGER',affinity ='3',notNull = false,primaryKeyPosition = 0}
房间期待不是真的但是因为剧本没有指明它的失败。有没有解决的办法?或者我将不得不使用SQL脚本更新所有现有表,以将这些INTEGER列更改为NOT NULL然后进行迁移。这将是很多工作,真的很糟糕!
答案 0 :(得分:0)
您可以用Kotlin编写它:
@Entity(tableName = "user_groups")
data class UserGroupModel (
@Primary Key
@ColumInfo(name = "_id")
var rowId: String,
@ColumnInfo(name = "is_default")
var isDefault: Int?)