Android Room Migration NonNull基元类型

时间:2018-05-31 18:49:43

标签: android android-sqlite android-room notnull

我正在从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然后进行迁移。这将是很多工作,真的很糟糕!

1 个答案:

答案 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?)