2016-01-10 3 views
1

Скажем, у меня есть структура Realm-объектов, который выглядит, как это -Android Realm.io - Удаление суб-объекты

public class Person extends RealmObject { 

    @PrimaryKey 
    private int id; 

    private String name; 

    private List<Pet> pets 

    // Setters, getters... 
} 

public class Pet extends RealmObject { 

    private String name; 

    private MedicalRecord record; 

    // Setters, getters... 

} 

public class MedicalRecord extends RealmObject { 

    private String something; 

    private String somethingElse; 

    // Setters, getters... 

} 

Теперь я получил новый объект Person с существующим идентификатором (первичный ключ) и я хочу обновить этого человека. Так что я сделать что-то вроде этого -

Беда в том, что список домашних животных этого человека (и медицинской документации домашних животных), все еще там в БД. больше не связаны с этим человеком, но все еще там.

Я пытался сделать это -

Person existingPerson = realm.where(Person .class).equalTo("id", ID).findFirst(); 
existingPerson.getPets().clear(); 

Но никакого успеха там. Как удалить подобъекты объектов realmObjects?

Кроме того, существует ли способ определить политику для объекта realm, чтобы он удалялся, когда нет ссылки на него (он не связан с каким-либо родительским объектом)?

+1

К сожалению, я не понял вас вопрос раньше. На данный момент нет способа очистки и удаления всех объектов из «RealmList», см. Эту проблему https://github.com/realm/realm-java/issues/1560 и https://github.com/realm/realm- java/issues/1104. В настоящее время обходным решением является удаление каждого объекта в цикле с обратным порядком: для (int i = dogs.size() - 1; i> = 0; i--) { dogs.get (i) .removeFromRealm(); } – beeender

+0

'RealmList.removeFromRealm()' скоро будет объединен, вы увидите прогресс в этом PR https://github.com/realm/realm-java/pull/2061 – beeender

+1

'RealmList.removeFromRealm()' был сливается с мастером, вы можете дождаться следующего релиза или попробовать его с моментальным снимком. – beeender

ответ

1

Теперь вы можете, и метод был переименован из последней фиксации в realmList.deleteAllFromRealm()

Смежные вопросы