我正在尝试使用Android Room Database在同一张表中创建一对多关系,我正在尝试创建一个名为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在同一张表中创建一对多关系吗?
对不起,我的英语不是我的母语。
答案 0 :(得分: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;
}
Dao方法
@Query("SELECT * FROM task where id =:id")
TaskWithSubtasks getTaskWithSubTasks(int id);
PS 。我怀疑您应该期望通过查询获得整个级别的结构。如果您有Task
个子任务Task1
和Task2
;并且Task1
有自己的子任务Task1_1
,我认为您仅通过一次对主节点的查询就不会获得Task1
子任务Task1_1
-{{1} }。虽然可以尝试