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

Android Studio中Room使用@Entity的primaryKeys属性构建报错如何解决?

问题原因

  • 冲突的主键声明:Room 中声明复合主键仅需要在 @Entity 注解的 primaryKeys 参数中列出所有主键字段即可,你同时给 slidingDoorType 单独添加了 @PrimaryKey 注解,两种主键声明方式冲突,触发注解处理器报错。
  • 主键字段不能为可空类型:SQLite 要求主键列默认非空,你声明的 slidingDoorType 是可空的 String? 类型,不符合 Room 主键的规范要求。

注:你换回单主键可以正常运行说明已经给 HashSet<Int> 类型的 parameterIds 配置了对应的 TypeConverter,该字段不属于本次报错的诱因。

解决方法

  1. 删除 slidingDoorType 字段上单独添加的 @PrimaryKey 注解
  2. 将 slidingDoorType 的可空类型修改为非空类型,保留默认空字符串即可
  3. 如果后续需要更清晰的错误提示排查问题,可以在模块级 build.gradle 中添加配置开启 kapt 详细日志:
kapt {
    verbose = true
}

同时在 gradle.properties 中调整 JVM 参数避免编译内存不足:

org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8

修正后的代码示例

@Entity(primaryKeys = ["name", "slidingDoorType"])
data class ParameterGroup(
    override var name: String, 
    override var parameterIds: HashSet<Int>, 
    var userCreated: Boolean, 
    var slidingDoorType: String = ""
): FilterGroup, Parcelable {
    override var selected: Boolean = true
}

内容的提问来源于stack exchange,提问作者Joakim Sjöstedt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:39:03