如何在 Room 中处理嵌套关系
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() {}
}
和一些 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();
问题出在 AWithB 的 @Relation 上,因为它只能指向实体。但该实体不能包括其他实体。我应该如何 return 数据库的整个结构?
您似乎可以拥有嵌套关系(文档页面上的 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() {}
}
我有实体:
@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();
问题出在 AWithB 的 @Relation 上,因为它只能指向实体。但该实体不能包括其他实体。我应该如何 return 数据库的整个结构?
您似乎可以拥有嵌套关系(文档页面上的 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() {}
}