You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Room框架主键自增仍需手动传ID问题求助

解决Room实体类自动生成主键时需手动传ID的问题

你的Account实体类中id字段是val类型且未设置默认值,导致创建实例时必须显式传入,即便你已经给主键标注了autoGenerate = true。以下是可行的解决办法:

方案:给id字段设置默认值0

修改实体类,为id添加默认值0,Room在插入数据时会自动替换这个默认值为生成的主键ID:

@Entity(tableName = "accounts")
data class Account(
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "user_id")
    val id: Int = 0, // 设置默认值0
    @ColumnInfo(name = "first_name")
    val firstName: String,
    @ColumnInfo(name = "last_name")
    val lastName: String?,
    @ColumnInfo(name = "email")
    val email: String
)

修改后,你的注册逻辑代码就能正常运行,无需手动传入id:

fun register(email: String, name: String) {
    return dbRepository.createAccount(Account(firstName = name, email = email))
}

额外说明

  • Room插入带自动生成主键的实体时,会忽略传入的默认值,自动生成唯一主键,Dao中insertAccount方法返回的Long就是生成的主键ID。
  • 保留id为val类型更合理,主键生成后不应被随意修改,避免数据异常。

内容的提问来源于stack exchange,提问作者Alix Blaine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:05:20