У меня есть API, который возвращает список объектов. Эти объекты имеют отношения к другим объектам. Но API возвращает только идентификаторы для них. Чтобы получить полный объект, я должен использовать другой API. Например:RealmObject с @PrimaryKey только
class Owner extends RealmObject {
...
RealmList<Cat> cats;
}
class Cat extends RealmObject {
@PrimaryKey
String id;
String name;
}
поэтому, когда я получаю список Owner
с хранить их в базе данных, как это:
for (OwnerDto o : owners) {
Owner owner = new Owner();
...
RealmList<Cat> catsList = new RealmList<>();
for (Cat c : o.cats) {
Cat cat = new Cat();
cat.setId(c.id);
catsList.add(cat);
}
owner.setCats(catsList);
realm.copyToRealmOrUpdate(owner);
}
, но в этом случае все имена котов будут удалены, если они были заселены раньше.
Возможно ли создать объект RealmObject с идентификатором только для того, чтобы установить отношение и заполнить его датами даты? Или указать только отношение с идентификатором? Или любое другое решение?
UPDATE: Я придумал решение, как это:
for (OwnerDto o : owners) {
Owner owner = new Owner();
...
RealmList<Cat> catsList = new RealmList<>();
for (Cat c : o.cats) {
Cat cat = realm.where(Cat.class)
.equalsTo("id", c.id)
.findFirst();
if (cat == null) {
cat = new Cat();
}
cat.setId(c.id);
catsList.add(cat);
}
owner.setCats(catsList);
realm.copyToRealmOrUpdate(owner);
}
Here Я понял, что есть метод realm.objectForPrimaryKey(User.self, key: "key")
для быстры, но я не финансировал аналог в Java версии.
Было бы неплохо иметь в этой ситуации что-то вроде realm.getOrCreate(Cat.class, c.id)
метода. Есть ли ?
Благодарим за предложение! Я создал проблему для отслеживания улучшения. https://github.com/realm/realm-java/issues/2166 – beeender
Я создал вспомогательный класс для поиска объектов по ключу (но он не будет их создавать, он не будет возвращен null): http: //stackoverflow.com/a/38136597/285678 – Loudenvier