отношение один ко многим в одной таблице с использованием базы данных Android Room - PullRequest
0 голосов
/ 01 августа 2020
• 1000 Код для entity 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;
    }

}

при компиляции во время компиляции выдается ошибка:

Обнаружены рекурсивные ссылки через @Embedded и / или @Relation: com.xxxxx .xxxxx.xxxx.Task -> com.xxxxx.xxxxx.xxxx.Task.

Есть ли другой способ создать отношения "один ко многим" в одной таблице, используя Android базу данных комнат?

Простите за английский sh это не мой родной язык

1 Ответ

0 голосов
/ 01 августа 2020

Попробуйте следующее:

Задача класса

@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);

PS Я сомневаюсь, что вы должны ожидать получения полноуровневой структуры с запросом. Если у вас Task с подзадачами Task1 и Task2; и Task1 имеет свою собственную подзадачу Task1_1, я не думаю, что вы получите Task1 с ней подзадачу Task1_1 только с одним запросом к основному узлу - Task. Хотя можно попробовать

...