首页 > 解决方案 > Room DB 使用 @Relation 将表 A 连接到表 B 和 B 到 C

问题描述

这似乎是一个不同的基本查询,但我无法通过关系来实现。

假设表 A 需要与表 B 连接

data class MasterQuery{
 @Embedded var tableA: TableA,
 @Relation(
    parentColumn = "table_a_relation",
    entityColumn = "table_b_details"
 )
 val tableB: TableB
}

现在我们如何将 TableB 连接到 TableC?并从所有三个表中获取 MasterQuery 结果。

首先不能将嵌入和关系放在同一个字段上。

然后这也失败了-

data class MasterQuery{
 @Embedded var tableA: TableA,
 @Relation(
    parentColumn = "table_a_relation",
    entityColumn = "table_b_details",
    entity = SubQuery::class)
   val subQuery: SubQuery
 }

 @Entity
 data class SubQuery{
   @Embedded var tableB: TableB,
   @Relation(
    parentColumn = "table_b_relation",
    entityColumn = "table_c_details"
 )
  val tableC: TableC
 }

错误找不到子查询。

请帮我解决这个问题。

标签: androidkotlinandroid-room

解决方案


尝试对您的课程进行以下更正:

data class MasterQuery{
 @Embedded var tableA: TableA,
 @Relation(
    parentColumn = "table_a_relation",
    entityColumn = "table_b_details",
    //entity = SubQuery::class) <---- 1. replace this with TableB class
    entity = TableB::class) 
   val subQuery: SubQuery
 }

 //@Entity  <---- 2. You don't need this
 data class SubQuery{
   @Embedded var tableB: TableB,
   @Relation(
    parentColumn = "table_b_relation",
    entityColumn = "table_c_details"
 )
  val tableC: TableC
 }

推荐阅读