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

问题描述

我的实体类别:

@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",true)

解决方法

不要将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
}
,

如何避免补全ID

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

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

id是由Room数据库自动生成的-表示我将ID放到构造函数中的任何内容都不会被覆盖

并非如此。如果您明确设置id,则此id将在插入时使用。

,

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