Исключение: 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