Android Room递归关系

问题描述 投票:0回答:1

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

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错误:

原因:在Android.arch.persistence.room.processor.PojoProcessor.access $ doProcess(PojoProcessor.kt:74)的android.arch.persistence.room.processor.PojoProcessor.doProcess(PojoProcessor.kt:113)中的java.lang.StackOverflowError )在android.arch.persistence.room.processor.PojoProcessor $ process $ 1.invoke(PojoProcessor.kt:105)在android.arch.persistence.room.processor.PojoProcessor $ process $ 1.invoke(PojoProcessor.kt:74)at at android.arch.persistence.room.processor.cache.Cache $ Bucket.get(Cache.kt:46)

我知道我可以从实体中删除子节点并迭代json以保存每个没有子节点的类别,然后通过父代码在单独的查询中获取子节点,但我只想知道是否可以有一个递归关系就像代码中的那样

android orm android-room datapersistance
1个回答
1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.