如何在不提供 id 的情况下自动生成 Room 数据库 id

How to autogenerate a Room database id without providing an id

我正在尝试创建一个房间数据库,我希望插入其中的每个项目都有自己的唯一 ID,而无需我提供它,问题是当我尝试将新项目插入数据库时​​,我得到了一个要求我提供 ID 时出错。

这是我的实体:

    @Entity(tableName = "notes_table")
    data class Note(

    @PrimaryKey(autoGenerate = true)
    val id: Int = 0,

    @ColumnInfo(name = "description")
    val description: String,

    @ColumnInfo(name = "priority")
    var priority: Int)

有没有办法让数据库创建自己的自动生成的自动增加的 id 列,而不必像这样添加它:

    val item = Note(id, item, priority)
    insert(item)

而是这样做:

    val item = Note(item, priority)
    insert(item)

因为你的数据classNote三个参数。

所以你必须通过传递三个参数来创建Note

这与自动生成或房间无关。

创建一个 constructoritempriority 作为参数

@Entity(tableName = "notes_table")
data class Note (var item: String,
        @ColumnInfo(name = "priority") 
        var priority: String) {
    @PrimaryKey(autoGenerate = true)
    var id: Long = 0,
    //.....
}

您可以简单地给 id 一个默认值并将其放在末尾:

@Entity(tableName = "notes_table")
data class Note(

    @ColumnInfo(name = "description")
    val description: String,

    @ColumnInfo(name = "priority")
    var priority: Int)

    @PrimaryKey(autoGenerate = true)    //must be at the end
    val id: Int = 0                     //Long type recommend
)

那么您可以:

val item = Note(item, priority)
insert(item)