Android Room рекурсивное отношение - PullRequest
0 голосов
/ 12 сентября 2018

Возможно ли в комнате иметь рекурсивные отношения? У меня есть сущность, которая может быть вложена в структуры Parent / Childs примерно так:

Category1
 |_________Category2
 |_________Category3
 |  |_________Category4
 |_________Category5`

Я копирую эту структуру из json, полученного из WebService.

Это моя текущая сущность:

@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 на android.arch.persistence.room.processor.PojoProcessor.doProcess (PojoProcessor.kt: 113) на 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, чтобы сохранить каждую категорию без дочерних элементов, а затем получить дочерние элементы по родительскому коду в отдельном запросе, но я просто хочу знать, возможно ли иметь рекурсивное отношение, как в коде

1 Ответ

0 голосов
/ 14 сентября 2018

Краткий ответ: НЕТ, у вас не может быть рекурсивных отношений.

Длинный ответ: Чтение документов об отношениях в комнате https://developer.android.com/reference/android/arch/persistence/room/Relation Я обнаружил, что вы не можете использовать аннотацию @Relation внутрикласс, аннотированный как @ Entity

Обратите внимание, что аннотация @Relation может использоваться только в классах Pojo, класс Entity не может иметь отношений.Это дизайнерское решение, позволяющее избежать распространенных ошибок при настройке сущностей.Подробнее об этом вы можете прочитать в основной документации по комнате.При загрузке данных вы можете просто обойти это ограничение, создав классы Pojo, расширяющие сущность.

...