使用 Android 房间数据库在同一张表中的一对多关系
Posted
技术标签:
【中文标题】使用 Android 房间数据库在同一张表中的一对多关系【英文标题】:one to many relation within same table using Android Room Database 【发布时间】:2020-11-22 00:01:59 【问题描述】:我正在尝试使用 android Room Database 在同一个表中创建一对多关系,我正在尝试创建一个名为 Task 的实体,它可以没有或有许多子任务,它也是 Task 类型,代码对于实体Task如下
package com.xxxxx.xxxxx.xxxx;
import androidx.room.Embedded;
import androidx.room.Entity;
import androidx.room.Index;
import androidx.room.PrimaryKey;
@Entity(tableName = "task_table", indices = @Index(value = "id", unique = true))
public class Task
@PrimaryKey(autoGenerate = true)
private int id;
private String description;
@Embedded
private Task parentTask;
public int getId()
return id;
public void setId(int id)
this.id = id;
public String getDescription()
return description;
public void setDescription(String description)
this.description = description;
public Task getParentTask()
return parentTask;
public void setParentTask(Task parentTask)
this.parentTask = parentTask;
编译时会在编译时抛出如下错误:
Recursive referencing through @Embedded and/or @Relation detected: com.xxxxx.xxxxx.xxxx.Task -> com.xxxxx.xxxxx.xxxx.Task.
还有其他方法可以使用 Android Room Database 在同一个表中创建一对多关系吗?
请原谅我的英语不是我的母语。
【问题讨论】:
【参考方案1】:试试这个:
课堂任务
@Entity(tableName = "task_table", indices = @Index(value = "id", unique = true))
public class Task
@PrimaryKey(autoGenerate = true)
private int id;
private String description;
private Int parentId; // <- here you should put parent Id, or null if there is no parent
........
类与关系
public class TaskWithSubtasks
@Embedded
Task task;
@Relation(
parentColumn = "id",
entityColumn = "parentId"
)
List<Task> subTasks;
道法
@Query("SELECT * FROM task where id =:id")
TaskWithSubtasks getTaskWithSubTasks(int id);
P.S. 我怀疑您应该期望通过查询获得整个级别的结构。如果你有Task
子任务Task1
和Task2
;并且Task1
有自己的子任务Task1_1
,我认为您不会通过它获得Task1
子任务Task1_1
,只需对主节点进行一次查询-Task
。虽然你可以试试
【讨论】:
这里需要帮助 --> ***.com/questions/63243505/…以上是关于使用 Android 房间数据库在同一张表中的一对多关系的主要内容,如果未能解决你的问题,请参考以下文章
在 MySQL 中,如何将一张表的内容复制到同一个数据库中的另一张表中?
在 MySQL 中,如何将一张表的内容复制到同一个数据库中的另一张表中?