查询嵌套@Relation的列表加入Room Android

bad*_*0me 5 android kotlin android-room

我一直在研究将Room数据库与Kotlin集成的新项目,但遇到了一些问题。我有一个Category实体,其中包含Question实体的列表。问题实体本身包含答案实体的列表。我想查询数据库,并获取包含问题及其答案的所有类别。使用解决方案,我可以返回仅包含第一类的列表。如果我将其更改为Flowable调用,它将返回相同的内容,但onNext方法会触发多次,最终会提取所有类别(每个类别在列表中),但我想一次获取所有类别。到目前为止,我所做的是:

实体:

@Entity(tableName = TABLE_CATEGORIES)
data class Category (
     @PrimaryKey(autoGenerate = true)
     var id: Int = 0,
     var name: String? = ""
)


@Entity(tableName = TABLE_QUESTIONS)
data class Question (
     var text: String? = "",
     @PrimaryKey(autoGenerate = true)
     var id: Int = 0,
     var categoryId: Int? = 0,
     var typeId: Int? = 0,
     var extraData: String? = "",
     @Ignore
     var answers: List<Answer>
)

@Entity(tableName = TABLE_ANSWERS)
data class Answer (
    @PrimaryKey(autoGenerate = true)
    var id: Int = 0,
    var text: String? = "",
    var isCorrect: Boolean? = false,
    var questionId: Int = 0
)
Run Code Online (Sandbox Code Playgroud)

关系类:

 class QuestionAnswersJoin {
    @Embedded
    var question: Question = Question()
    @Relation(parentColumn = "id", entityColumn = "questionId")
    var answers: List<Answer> = ArrayList()
}

class CategoryQuestionsAnswersJoin {
    @Embedded
    var category: Category = Category()
    @Relation(parentColumn = "id", entityColumn = "categoryId", entity = Question::class)
     var questionsAnswers: List<QuestionAnswersJoin> = ArrayList()
}
Run Code Online (Sandbox Code Playgroud)

查询:

@Transaction
@Query("SELECT * FROM $TABLE_CATEGORIES")
fun getCategories() : Single<List<CategoryQuestionsAnswersJoin>>
Run Code Online (Sandbox Code Playgroud)