gpt4 book ai didi

java - 与 Room 的多对多关系导致错误 : Entities and Pojos must have a usable public constructor

转载 作者:太空狗 更新时间:2023-10-29 14:41:52 30 4
gpt4 key购买 nike

我遇到了标题中所述的问题。我有以下实体:

@Entity(tableName = "Person")
data class Person(@PrimaryKey var id: Int,
var firstName: String,
var surname: String,
var age: Int,
var numberOfHobbies: Int) {
@Ignore
constructor() : this(0, "", "", 0, 0)
}

@Entity(tableName = "Skill")
data class Skill(@PrimaryKey var id: Int,
var skillName: String) {
@Ignore
constructor() : this(0, "")
}

@Entity(tableName = "PersonSkill")
data class PersonSkill(var personId: Int,
var skillId: Int) {
@Ignore
constructor() : this(0, 0)

@field:PrimaryKey(autoGenerate = true)
var id: Int = 0
}

以及以下关系:

data class SkillWithPersons(
@Embedded var skill: Skill = Skill(0, "UNKNOWN"),
@Relation(
parentColumn = "id",
entityColumn = "skillId",
entity = PersonSkill::class,
projection = arrayOf("personId")
) var personIds: List<Int> = emptyList()
) {
constructor() : this(Skill(0, "UNKNOWN"), emptyList())
}

data class PersonWithSkills(
@Embedded var person: Person = Person(0, "UNKNOWN", "UNKNOWN", 0, 0),
@Relation(
parentColumn = "id",
entityColumn = "personId",
entity = PersonSkill::class,
projection = arrayOf("skillId")
) var skillIds: List<Int> = emptyList()
) {
constructor(): this(Person(0, "UNKNOWN", "UNKNOWN", 0, 0), emptyList())
}

我什么都试过了,还是不行。我不断收到 kotlin-kapt 的以下错误:

e: error: Entities and Pojos must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type).
e:

e: Tried the following constructors but they failed to match:
e: Integer(int) : [value : null]
e: Integer(java.lang.String) : [s : null]
e: error: Entities and Pojos must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type).
e:

e: java.lang.IllegalStateException:

我正在使用以下版本:

带有 Gradle 4 的 Android Studio 3.0,房间:1.0.0-alpha9-1,构建工具:26.0.2, Kotlin :1.1.51

使用 @Relation 似乎存在一个错误,因为 kotin-kapt 似乎无法处理它。有没有人遇到过这种情况?我什至尝试从 @Relation 中删除 projection,但即使那样似乎也没有什么不同。

最佳答案

“Florina Muntenescu”在她的博客 post 中提到,Room 中的@Relation 标签现在仅支持一对多关系。

同样针对上述问题,如下所述更改您的数据类

@Entity(tableName = "Person")
data class Person(@PrimaryKey
var id: Int = 0,
var firstName: String = "",
var surname: String = "",
var age: Int = 0,
var numberOfHobbies: Int = 0)

@Entity(tableName = "Skill")
data class Skill(@PrimaryKey
var id: Int = 0,
var skillName: String = "")

@Entity(tableName = "PersonSkill")
data class PersonSkill(@PrimaryKey
var id: Int = 0
var personId: Int = 0,
var skillId: Int = 0)



data class SkillWithPersons(
@Embedded
var skill: Skill? = null
@Relation(
parentColumn = "id",
entityColumn = "skillId",
entity = PersonSkill::class,
projection = arrayOf("personId"))
var personIds: List<Int> = ArrayList()
)

data class PersonWithSkills(
@Embedded
var person: Person? = null
@Relation(
parentColumn = "id",
entityColumn = "personId",
entity = PersonSkill::class,
projection = arrayOf("skillId"))
var skillIds: List<Int> = ArrayList()
)

这样你就可以摆脱错误。

关于java - 与 Room 的多对多关系导致错误 : Entities and Pojos must have a usable public constructor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46730931/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com