Android Studio 不允许我在 Room 中使用 primaryKeys

Posted

技术标签:

【中文标题】Android Studio 不允许我在 Room 中使用 primaryKeys【英文标题】:Android studio don't let me use primaryKeys for Room 【发布时间】:2021-09-24 09:26:20 【问题描述】:

为了给保存的entities设置唯一性,我这样设置primaryKeys

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

而不是使用标准的@PrimaryKey。然而,这在尝试构建应用程序时会产生错误:

任务 ':commonmodel:kaptDebugKotlin' 执行失败。 执行 org.jetbrains.kotlin.gradle.internal.KaptExecution 时发生故障 java.lang.reflect.InvocationTargetException(没有错误信息)

对房间不太熟悉,不知道我做错了什么。但是一旦我恢复到使用 @PrimaryKey 的旧方式,我就可以构建和运行应用程序...

【问题讨论】:

【参考方案1】:

您的问题是@PrimaryKey var slidingDoorType: String? = "" 声明。问题是您不能将可空字段作为主键。

为了解决此问题,请将类型更改为不可为空并删除 @PrimaryKey,因为您已经使用 @EntityprimaryKeys 属性包含此字段。

var slidingDoorType: String = ""

【讨论】:

啊,很好,效果很好,谢谢!

以上是关于Android Studio 不允许我在 Room 中使用 primaryKeys的主要内容,如果未能解决你的问题,请参考以下文章

GeoPoint 不允许存储在 Room 中

如何从 api 获取数据并将数据插入 Android Studio 中的 ROOM(数据库)?

为啥此查询可以在 Android Studio 中的 App Inspection 的 Database Inspector 部分工作,但不能在 Room Query 中工作?

android studio应用程序的Firebase同步问题

Android Room 不确定如何将光标转换为方法的返回类型问题

Android Room 数据库中的查询支持