首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安卓机房关系一对多

安卓机房关系一对多
EN

Stack Overflow用户
提问于 2018-10-04 20:36:17
回答 1查看 754关注 0票数 0

我正在开发一个使用房间库的Android应用程序。

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

一个任务有一个或多个项,一个项有一个或多个subItem。

我需要询问它的子任务。目前,我查询任务,然后查询项,然后查询subItems,但我希望提高它的效率。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-04 21:24:51

Android是一个非常整洁的SQLite包装器。我相信你已经知道了。我在这里假设您熟悉SQL和join语句。如果不读这里。我要说的原因是,您实际上可以在DAO中编写任何您想写的东西,并执行许多SQL查询。

在您的例子中,您需要定义@,Item & SubItem。然后,您需要定义它们之间的关系,即项目中的任务的外键是什么,SubItem中的项的外键是什么。

示例:--我是在没有编译的情况下从内存中编写的,所以我可能会犯一些错误,但是它应该可以工作。

代码语言:javascript
运行
复制
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;
    }
}

您也可以为subItem做同样的事情。现在拿刀。

代码语言:javascript
运行
复制
public interface DAO {

    @Query("SELECT * from " + 
        "(LEFT JOIN item ON task.id = item.taskId) " +
        "LEFT JOIN sub_item ON item.id = sub_item.itemId " + 
        "WHERE task.id=:id")
    List getTask(int id);

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52654776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档