【发布时间】:2017-10-13 13:18:14
【问题描述】:
我遇到了标题中所述的问题。我有以下实体:
@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,
科特林:1.1.51
使用@Relation 似乎有一个错误,因为 kotin-kapt 似乎无法处理它。有没有人遇到过这种情况?我什至尝试从@Relation 中删除projection,但即使这样似乎也没有什么不同。
【问题讨论】:
-
您是否在 Java 和注释处理器中尝试过相同的 Room 架构而不是 kapt?
-
从默认构造函数中删除
@Ignore为我消除了错误。 -
@Virusman 对我不起作用
标签: java android kotlin android-room