My data class looks like this

@Entity(tableName = "items")
data class Item(
        @ColumnInfo(name = "name") var name: String = "",
        @ColumnInfo(name = "room") var room: String = "",
        @ColumnInfo(name = "quantity") var quantity: String = "",
        @ColumnInfo(name = "description") var description: String = "",
        @PrimaryKey(autoGenerate = true)
        @ColumnInfo(name = "id") var id: Long = 0
)

Room使用SQLite,SQLite在其数据库中支持非空列.我试着用@NonNull注释列,但没有效果.

Is there a way to make columns in Room Database not nullable?

推荐答案

In order to identify exact annotation for NOT NULL I went through the list of all annotations provided at this link: android.arch.persistence.room but could not find any relevant annotation:

enter image description here

我的假设是,由于您使用的是Kotlin,默认情况下,它将var视为非可选的,所以您声明的所有属性都不是空的.为了将变量声明为可选变量,您可能必须使用?操作员,下面是一个示例:

var name: String // NOT NULL 
var name: String? // OPTIONAL

Updated based on comment:

我猜你被空字符串和空字符串搞混了.NULL表示没有值,在共享代码中,您为每一列提供了一个默认值,该值是一个空字符串,不等于NULL,因此,即使您可能没有为该属性提供值,默认情况下也会为其分配一个空字符串.

try 删除属性的赋值运算符和RHS值,然后插入记录而不为该属性赋值,应该会出现相应的错误.

Basically, convert below statement:

@ColumnInfo(name = "name") var name: String = ""

@ColumnInfo(name = "name") var name: String

Kotlin相关问答推荐

Regex(Kotlin)仅匹配句子末尾的句号,而忽略中间的句号,如缩写

Scala与Kotlin中的迭代

Spring Boot kotlin协程不能并行运行

如何使用 Kotlin Maven 更改 Minecraft 插件中的 Shulker GUI 标题

同时也是一个字符串的 Kotlin 枚举

在 detekt 配置文件中找不到某些属性

如何处理基于枚举提前返回的 forEach 循环,Kotlin 中的一条路径除外

如何限制 Kotlin 中的枚举?

使用 LazyListScope 嵌套可组合项

为什么 IntelliJ Idea 无法识别我的 Spek 测试?

Kotlin 中多个 init 块的用例?

为什么 android studio 不为所有安全参数生成代码?

致命错误 LifecycleOwners 必须在 registerForActivityResult 开始之前调用 register

有没有办法在spring webflux和spring data react中实现分页

Kotlin-Java 互操作不能与可变参数一起使用

使用主构造函数时使用Kotlin getter/setter

尾随 lambda 语法(Kotlin)的目的是什么?

你如何在 Kotlin 中注释 Pair 参数?

Kotlin for assertThat(foo, instanceOf(Bar.class))

如何在 kotlin 中创建重复对象数组?