Исключение: io.objectbox.exception.DbDetachedException, хотя сущность присоединена - PullRequest
0 голосов
/ 05 декабря 2018

Используя Джексона с 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 Ответ

0 голосов
/ 10 декабря 2018

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

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

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

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

...