3

房间可能有递归关系吗?我有一个可以嵌套在类似这样的父/子结构中的实体

Category1
 |_________Category2
 |_________Category3
 |  |_________Category4
 |_________Category5`

我从一个从 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;
}

但在编译过程中,我得到一个 StackOverflow 错误:

原因:java.lang.StackOverflowError at android.arch.persistence.room.processor.PojoProcessor.doProcess(PojoProcessor.kt:113) at 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 以保存每个没有子项的类别,然后在单独的查询中通过父代码获取子项,但我只想知道是否可以递归与代码中的关系类似

4

1 回答 1

1

简短的回答:不,你不能有递归关系。

长答案:阅读有关房间中关系的文档https://developer.android.com/reference/android/arch/persistence/room/Relation我发现您不能在注释为 @Entity 的类中使用 @Relation 注释

注意@Relation 注解只能在 Pojo 类中使用,Entity 类不能有关系。这是避免实体设置中常见陷阱的设计决策。您可以在 Room 主文档中了解更多相关信息。加载数据时,您可以通过创建扩展实体的 Pojo 类来解决此限制。

于 2018-09-14T09:50:46.330 回答