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

Sam*_*hen 9 android kotlin android-database android-room

我的实体类:

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

    val name: String,
    val age: Int,
    val gpa: Double,
    val isSingle: Boolean
) 
Run Code Online (Sandbox Code Playgroud)

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

val student = Student(0L, "Sam", 27, 3.5, true)
Run Code Online (Sandbox Code Playgroud)

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

val student = Student("Sam", 27, 3.5, true)
Run Code Online (Sandbox Code Playgroud)

jep*_*bio 6

不要将 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
}
Run Code Online (Sandbox Code Playgroud)


ser*_*nov 5

如何避免伪造id

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

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

id 是由 Room 数据库自动生成的 - 意味着无论我将 id 添加到构造函数中,它都会被覆盖

不是那样的。如果您id明确设置,那么这id将在插入时使用。