Android Studio中Room使用@Entity的primaryKeys属性构建报错如何解决?
问题原因
- 冲突的主键声明:Room 中声明复合主键仅需要在
@Entity注解的primaryKeys参数中列出所有主键字段即可,你同时给slidingDoorType单独添加了@PrimaryKey注解,两种主键声明方式冲突,触发注解处理器报错。 - 主键字段不能为可空类型:SQLite 要求主键列默认非空,你声明的
slidingDoorType是可空的String?类型,不符合 Room 主键的规范要求。
注:你换回单主键可以正常运行说明已经给
HashSet<Int>类型的parameterIds配置了对应的 TypeConverter,该字段不属于本次报错的诱因。
解决方法
- 删除
slidingDoorType字段上单独添加的@PrimaryKey注解 - 将
slidingDoorType的可空类型修改为非空类型,保留默认空字符串即可 - 如果后续需要更清晰的错误提示排查问题,可以在模块级
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
相关产品推荐
相关产品推荐

