объект связывания области возвращает нуль - PullRequest
0 голосов
/ 21 марта 2020

У меня есть модель с именем Item. модель имеет привязку объектов к модели ItemModifier. Вопрос в том, почему я должен запрашивать его, чтобы вернуть результат?

open class Item() : RealmObject() {

    @PrimaryKey
    var id: String = ""

    @LinkingObjects("item")
    val itemModifiers: RealmResults<ItemModifier>? = null
}
var item = Item()
item.id = UUID.randomUUID().toString()
realm.copyToRealmOrUpdate(itemModifier)

var itemModifier = ItemModifier()
itemModifier.id = UUID.randomUUID().toString()
itemModifier.item = item
realm.copyToRealmOrUpdate(itemModifier)

for (itemModifier in item.itemModifiers) { // this returns nullOrEmpty.
   Log.e("test", itemModifier.id)
}

queriedItem = Realm.getDefaultInstance().where(Item::class.java).equalTo("id", item.id).findFirst()!!

for (itemModifier in queriedItem.itemModifiers) { // this return itemModifier.
   Log.e("test", itemModifier.id)
}

1 Ответ

0 голосов
/ 24 марта 2020

Во-первых, я предполагаю, что первая realm.copyToRealmOrUpdate(itemModifier) является опечаткой и должна быть realm.copyToRealmOrUpdate(item).

После этого созданный вами предмет (неуправляемый объект) теперь скопирован в область, но у вас есть ссылка на неуправляемый объект . Вот почему взгляд на его поле связывающих объектов дает пустой список. Принимая во внимание, что, как вы показали, извлечение управляемого объекта с помощью запроса дает ожидаемый результат.

Обратите внимание, что согласно документам ( здесь ), * Метод 1013 * возвращает ссылку на управляемый объект, поэтому вы можете использовать ее немедленно и получить правильный результат. Например:

var item = Item()
item.id = UUID.randomUUID().toString()
val managedItem = realm.copyToRealmOrUpdate(item)

var itemModifier = ItemModifier()
itemModifier.id = UUID.randomUUID().toString()
itemModifier.item = managedItem
realm.copyToRealmOrUpdate(itemModifier)

for (itemModifier in managedItem.itemModifiers) { // this should now work.
   Log.e("test", itemModifier.id)
}
...