Android 房间数据库创建没有 ID 的实体对象

Android Room Database Create Entity Object without Id

我的实体class:

@Entity(tableName = "student")
data class Student(
    @PrimaryKey(autoGenerate = true)
    val id: Long,

    val name: String,
    val age: Int,
    val gpa: Double,
    val isSingle: Boolean
) 

问题是,由于 id 是由 Room 数据库自动生成的——这意味着无论我为 id 放入什么构造函数,它都会被覆盖,并且因为它是构造函数中的参数之一,所以我每次都必须像这样给出 id

val student = Student(0L, "Sam", 27, 3.5, true)

我怎样才能避免编造id,这样我就可以像这样输入必要的数据:

val student = Student("Sam", 27, 3.5, true)

How can I avoid making up the id

只需将默认值设置为 0(或空)

@Entity(tableName = "student")
data class Student(
    @PrimaryKey(autoGenerate = true)
    val id: Long = 0, <-- default value (or use null)

id is auto-generated by the Room database - means no matther what I put for the id into the constructor it will be overridden anyway

不太喜欢。如果您明确设置 id,则此 id 将用于插入。

如果您只想在您的实体中为您的情况设置自动递增 id,请将 id 的类型设置为 Int,并在您的构造函数中为 id 值参数使用 null 值,这会为您处理工作。

不要将 id 放在构造函数中:

@Entity(tableName = "student")
data class Student(
    val name: String,
    val age: Int,
    val gpa: Double,
    val isSingle: Boolean
) {
    @PrimaryKey(autoGenerate = true)
    var id: Long? = null
}