0
室工作

我有实体:如何使用嵌套关系,

@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() {} 
} 

一些的POJO:

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对AWithB来说,因为它不能指向实体以外的任何东西。但该实体不能包含其他实体。我应该如何从DB返回整个结构?

回答

1

看起来你可以有嵌套关系(文档页面上的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() {} 
} 
+0

你好Andrej,你知道如何由AwithB命令例如? –

+0

我不确定你的意思。对于A表,您还可以使用“Order By”语句的普通查询。对于从@Relation获得的实体列表,您必须至少在Java Bean(AWithB :: getBWithCOrdered)的getter中自行完成。 –