如何在房间内使用嵌套关系[英] How to work with nested relationships in Room

本文是小编为大家收集整理的关于如何在房间内使用嵌套关系的处理方法,想解了如何在房间内使用嵌套关系的问题怎么解决?如何在房间内使用嵌套关系问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有实体:

@Entity
public class A {
    @PrimaryKey(autoGenerate = true)
    public long id;
    public A() {}
}

@Entity()
public class B {
    @PrimaryKey @NonNull
    public String id;
    public String oneCId;
    public String anotherCId;
    public long aId;
    public B() {}
}

@Entity
public class C {
    @PrimaryKey @NonNull
    public String id;
    public String value;
    public C() {}
}

和一些pojos:

public class AWithB {
    @Embedded
    public A a;

    @Relation(parentColumn = "id", entityColumn = "aId")
    public List<BWithC> bWithC;

    public AWithB() {}
}

public class BWithC {
    @Embedded
    public B b;
    public C oneC;
    public C anotherC;

    public BWithC() {}
}

与DAO:

@Query("SELECT * FROM a")
List<AWithB> getAllNow();

问题是@Relation for awithb,因为它不能指向任何其他的东西.但该实体不能包括其他实体.我应该如何从DB返回整个结构?

推荐答案

似乎可以具有嵌套关系(文档页面上的javadoc是出于某种原因而不显示整个代码,并且由于这个原因而误导).

它是工作:

public class AWithB {
    @Embedded
    public A a;

    @Relation(parentColumn = "id", entityColumn = "aId", entity = B.class)
    public List<BWithC> bWithC;

    public AWithB() {}
}

对于许多人来说,您仍然可以使用@relation注释.出于某种原因,您不能有简单的实例 - 您需要这里的集合.但它正在工作:

public class BWithC {
    @Embedded
    public B b;
    @Relation(parentColumn = "oneCId", entityColumn = "id")
    public Set<C> oneC;
    @Relation(parentColumn = "anotherCId", entityColumn = "id")
    public Set<C> anotherC;

    public BWithC() {}
}

本文地址:https://www.itbaoku.cn/post/1793997.html