Room Kotlin:实体和Pojos必须具有可用的公共构造函数。卡在这个错误上

Shu*_*der 4 android kotlin android-room

我遇到两个错误

  • 错误:带@Relation注释的字段不能为构造函数参数。在构造对象之后获取这些值。

  • 错误:带@Relation注释的字段不能为构造函数参数。在构造对象之后获取这些值。

我有两个桌子。一个是任务表,另一个是子任务表。对于任务表的每个实体,子任务表都有一些实体。

所以我试图从单个任务中获取所有任务和子任务列表

道:

@Query("Select * from TaskTable")
fun getTasks():List<TaskModel>
Run Code Online (Sandbox Code Playgroud)

任务模型:

class TaskModel(
        @Embedded
        var taskTable: TaskTable,

        @Relation(parentColumn = "id",
                entityColumn = "taskId")
        var subTaskTable: List<SubTaskTable>
)
Run Code Online (Sandbox Code Playgroud)

任务表:

@Entity
data class TaskTable(
    @PrimaryKey(autoGenerate = true)
    var id:Int = 0,
    var taskListId:Int = 0,
    var title: String,
    var details:String?
)
Run Code Online (Sandbox Code Playgroud)

子任务表:

@Entity
data class SubTaskTable (
    @PrimaryKey(autoGenerate = true) var id: Int = 0,
    var taskId: Int = 0,

    var title: String,
    var details: String?)
Run Code Online (Sandbox Code Playgroud)

build.gradle

//room
def room_version = "1.1.0"
implementation "android.arch.persistence.room:runtime:$room_version"
kapt "android.arch.persistence.room:compiler:$room_version"
// Test helpers
testImplementation "android.arch.persistence.room:testing:$room_version"
Run Code Online (Sandbox Code Playgroud)

我应用了kotlin-kapt插件

帮助我解决此问题。我在堆栈溢出上搜索并实现一些答案,但此问题未解决。

Epi*_*rce 7

好吧,它说它们不应该是构造函数参数,因此请尝试使它们不是构造函数参数。

class TaskModel() {
    @Embedded
    lateinit var taskTable: TaskTable

    @Relation(parentColumn = "id",
              entityColumn = "taskId")
    lateinit var subTaskTable: List<SubTaskTable>
}
Run Code Online (Sandbox Code Playgroud)