CLu*_*era 5 orm android data-persistence android-room
room 可能有递归关系吗?我有一个可以嵌套在父/子结构中的实体,如下所示
Category1
|_________Category2
|_________Category3
| |_________Category4
|_________Category5`
Run Code Online (Sandbox Code Playgroud)
我从 WebService 获取的 json 复制此结构。
这是我当前的实体:
@Entity(tableName = "categories")
public class Category
{
@PrimaryKey
@NonNull
private String code;
private String name;
private String parentCode;
@Relation(parentColumn = "code", entityColumn = "parentCode", entity = Category.class)
private List<Category> childrens;
}
Run Code Online (Sandbox Code Playgroud)
但在编译过程中出现 StackOverflow 错误:
原因: android.arch.persistence.room.processor.PojoProcessor.doProcess(PojoProcessor.kt:113) 处的 java.lang.StackOverflowError 位于 android.arch.persistence.room.processor.PojoProcessor.access$doProcess(PojoProcessor.kt:74) )在 android.arch.persistence.room.processor.PojoProcessor$process$1.invoke(PojoProcessor.kt:105) 在 android.arch.persistence.room.processor.PojoProcessor$process$1.invoke(PojoProcessor.kt:74) android.arch.persistence.room.processor.cache.Cache$Bucket.get(Cache.kt:46)
我知道我可以从实体中删除子级并迭代 json 以保存没有子级的每个类别,然后在单独的查询中通过父级代码获取子级,但我只想知道是否可以有递归关系就像代码中的关系
简短的回答:不,你不能有递归关系。
长答案:阅读有关 Room 中 Relation 的文档https://developer.android.com/reference/android/arch/persistence/room/Relation我发现您不能在注释为 @Entity 的类中使用 @Relation 注释
请注意,@Relation 注解只能在 Pojo 类中使用,实体类不能有关系。这是一个设计决策,旨在避免实体设置中的常见陷阱。您可以在 Room 主文档中阅读更多相关信息。加载数据时,您可以通过创建扩展实体的 Pojo 类来解决此限制。