Исключение: io.objectbox.exception.DbDetachedException, хотя сущность присоединена

Используя Джексона с Retrofit, я хотел, чтобы список друзей был установлен на friendToMany во время десериализации. Как я прошел с документацией, мы должны вручную назначить эту сущность для boxstore, когда assignable=true установлено. Итак, я делаю так (как показано в коде). Этот подход работает только для первого элемента, частью которого является этот код. Это не работает для элемента 2 или далее.

@Id(assignable = true)
@JsonProperty("_id")
public long id;

@Transient
private List<Friend> friends = null;

@JsonIgnore
@Backlink(to = "demoResponseToOne")
ToMany<Friend> friendToMany;

@JsonProperty("friends")
public void setFriends(
        List<Friend> friends)
    {
    this.friends = friends;
    for (Friend friend : friends)
        {
        MyApplication.getBoxStore().boxFor(Friend.class).attach(friend);
        friendToMany.add(friend);
        }
    }

Исключение составляет: io.objectbox.exception.DbDetachedException: Cannot resolve relation for detached entities, call box.attach(entity) beforehand. на момент add(friend), Я имею в виду, что это работает, когда этот корневой элемент является первым элементом списка.

1 ответ

Вам необходимо прикрепить Box<Friend> в this а также, который владеет ToMany быть измененным:

MyApplication.getBoxStore().boxFor(Friend.class).attach(this);

Фон: если вы используете @Id(assignable = true) Вы должны позаботиться о некоторых вещах, которые ObjectBox обычно делает для вас. Это включает в себя прикрепление Box перед изменением любого ToMany,

Источник: https://docs.objectbox.io/relations https://docs.objectbox.io/advanced/object-ids

Другие вопросы по тегам