Android房间关系一对多

时间:2018-10-04 20:36:18

标签: android sql android-room

我正在使用Room Library开发一个Android应用。

该应用程序具有3个实体,例如任务,项目和子项目。

一个任务有一个或多个项目,一个项目有一个或多个子项目。

我需要使用其子查询任务。目前,我查询任务,然后查询项目,然后查询子项目,但我想使其更加高效。

我已经阅读了https://developer.android.com/reference/android/arch/persistence/room/Relation,但是我不知道如何编写这种关系。

1 个答案:

答案 0 :(得分:0)

Android Room是SQLite的非常简洁的包装器。我确定你已经知道了。 我在这里假设您熟悉SQL和join语句。 如果没有读here。 我之所以这么说,是因为您实际上可以在DAO中编写任何内容,并且可以执行许多SQL查询。

对于您的情况,您需要为Task,Item和SubItem定义@Enitity。 然后,您需要定义它们之间的关系,即什么是Item中Task的外键和SubItem中Item的外键。

示例: 我是从内存中编写的,没有进行编译,因此我可能会犯一些错误,但是应该可以使用。

def successful_function
  `source /usr/local/share/chruby/chruby.sh && chruby`
end

successful_function

您可以对subItem执行相同的操作。 现在是DAO。

import android.arch.persistence.room.Entity;
import android.arch.persistence.room.ForeignKey;
import android.arch.persistence.room.PrimaryKey;

import static android.arch.persistence.room.ForeignKey.CASCADE;

@Entity(foreignKeys = @ForeignKey(entity = Task.class,
                                  parentColumns = "id",
                                  childColumns = "taskId",
                                  onDelete = CASCADE))
public class Item {
    @PrimaryKey public final int id;
    public final int taskId;

    public Item(final int id, final int userId) {
        this.id = id;
        this.userId = userId;
    }
}