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

3

我希望创建一个房间数据库,每个插入的项目都有自己独特的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)
3个回答

5
创建一个构造函数,它以项和优先级作为参数。
@Entity(tableName = "notes_table")
data class Note (var item: String,
        @ColumnInfo(name = "priority") 
        var priority: String) {
    @PrimaryKey(autoGenerate = true)
    var id: Long = 0,
    //.....
}

2
你可以简单地给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)

0
因为你的数据类 Note三个参数。
所以你必须通过传递三个参数来创建 Note
这与自动生成或房间无关。

我应该省略id参数吗?如果是这样的话,如果我想要删除或更新数据库中的一行记录,Room会如何识别没有id列的特定行呢? - undefined
@DavidWekesa 是的。你可以使用其他变量来生成你的主键,并使用这些主键来查找要删除或更新的行对象。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接