Room+kotlin data class 未设置非空限制却报

2020-06-30  本文已影响0人  酸酸的豆角w

room的基本使用不做介绍。

项目中添加的依赖配置:

    dependences{

      def room_version ="2.2.5"//room以及依赖库版本

      api "androidx.room:room-runtime:$room_version"//room库

      kapt "androidx.room:room-compiler:$room_version"//注解处理 kotlin 使用kapt 

      implementation "androidx.room:room-rxjava2:$room_version"//room rxjava

      implementation "androidx.room:room-guava:$room_version"//非必须

      testImplementation "androidx.room:room-testing:$room_version"//测试有效
    }

有问题的kotlin实体:

@Entity(tableName = "tb_schoolbean")
data class SchoolBean(

        var belongTo: String,
        var collegeSpec: String,
        var collegeType: String,
        var department: String,
        var invited: Int=0,
        var logo: String,
        var major: String,
        var name: String,
        var region: String,
        var status: Boolean,
        var summary: String,
        @PrimaryKey
        @Nullable
        var collegeId: String
) : Serializable, MultiItemEntity {
    override fun getItemType(): Int {
        return 5
    }
}

这里踩了kotlin的坑,实体的成员变量未添加 ? ,则默认为非空字段,编译阶段生成的建表语句为各个字段都添加了 NOT NULL 非空约束,实际业务场景中字段有为空情况,进行插入数据就报了错:
[Error Inserting : NOT NULL constraint failed: (code 1299) in Room Database]

修改后实体:

@Entity(tableName = "tb_schoolbean")
data class SchoolBean(

        var belongTo: String?,
        var collegeSpec: String?,
        var collegeType: String?,
        var department: String?,
        var invited: Int=0,
        var logo: String?,
        var major: String?,
        var name: String?,
        var region: String?,
        var status: Boolean,
        var summary: String?,
        @PrimaryKey
        @Nullable
        var collegeId: String
) : Serializable, MultiItemEntity {
    override fun getItemType(): Int {
        return 5
    }
}
上一篇 下一篇

猜你喜欢

热点阅读