You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Room自关联多对多关系下TaskWithTasks数据类的正确实现

修正Room多对多关联数据类TaskWithTasks的错误

原TaskWithTasks数据类的错误在于@Relation注解的配置不符合Room多对多关联的解析规则,导致DAO无法正常工作,具体问题点:

  • entityColumn错误指定为交叉表的childTaskId,实际应指向关联实体(Task)的主键taskId
  • 未在Junction中明确指定交叉表与父、子实体的列映射关系,Room无法识别关联逻辑

正确的TaskWithTasks数据类写法如下:

data class TaskWithTasks(
    @Embedded val task: Task,
    @Relation(
        parentColumn = "taskId", // 父实体Task的主键
        entityColumn = "taskId", // 子实体Task的主键
        associateBy = Junction(
            value = TaskTaskCR::class,
            parentColumn = "parentTaskId", // 交叉表中关联父Task的列
            entityColumn = "childTaskId" // 交叉表中关联子Task的列
        )
    )
    val tasks: List<Task> // 当前任务创建的所有子任务
)

DAO部分无需修改,保持原代码即可正常运行。@Transaction注解确保查询的原子性,SELECT * FROM tasks会返回所有任务,结合修正后的关联配置,Room会自动通过交叉表TaskTaskCR关联每个任务对应的子任务列表。

内容的提问来源于stack exchange,提问作者mrdarip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 14:55:11