Не удалять вложенные объекты из области - PullRequest
0 голосов
/ 27 ноября 2018

Android Studio 3.2.Realm 5.8.0

    public class Merchant extends RealmObject {
        @PrimaryKey
        private long id;
        private Image preview;
    }

    public class Image extends RealmObject {
        @PrimaryKey
        private long id;
    }

Мне нужно удалить объект Merchants с определенными идентификаторами и все встроенные объекты (изображение в моем примере).

Итак, код:

         public static void updateMerchantList(final List<Merchant> thatMerchantsList) {

                Realm realm = Realm.getDefaultInstance();
                try {
                    realm.executeTransaction(new Realm.Transaction() {
                        @Override
                        public void execute(Realm realm) {
                            RealmList<Merchant> localMerchantList = getMerchantsRealmList();
                            if (!EqualsUtil.areEqualContentLists(localMerchantList, thatMerchantsList)) {
                                List<Merchant> itemNotExistInThatMerchants = new ArrayList<>(localMerchantList);
                                itemNotExistInThatMerchants.removeAll(thatMerchantsList);
                                if (itemNotExistInThatMerchants.size() > 0) {
                                    localMerchantList.removeAll(itemNotExistInThatMerchants);
                                    Long[] idsToDeleteArray = new Long[itemNotExistInThatMerchants.size()];
                                    for (int index = 0; index < itemNotExistInThatMerchants.size(); index++) {
                                        Merchant merchant = itemNotExistInThatMerchants.get(index);
                                        idsToDeleteArray[index] = merchant.getId();
                                    }
                                    RealmResults<Merchant> localMerchantsForDelete = realm.where(Merchant.class).in(Merchant.ID, idsToDeleteArray).findAll();
                                    boolean isDelete = localMerchantsForDelete.deleteAllFromRealm();
                                }
                            } 
                        }
                    });
                } finally {
                    realm.close();
                }
            }

 public static RealmList<Merchant> getMerchantsRealmList() {
        Realm realm = Realm.getDefaultInstance();
        try {
            RealmResults<Merchant> realmResults = realm.where(Merchant.class).findAll();
            RealmList<Merchant> realmList = new RealmList<>();
            realmList.addAll(realmResults.subList(0, realmResults.size()));
            return realmList;
        } finally {
            realm.close();
        }
    }

В результате 2 удачи Торговца удаляются из Царства (по методу deleteAllFromRealm).Хорошо.

Но все встроенные объекты (например, Image) НЕ удалить из области.

Вопросы:

    1. Это потому, что мне нужно написать собственный метод, который cascade удаляет Merchant и все его внедренные объекты?
  • Может ли Realm каскадно удалять объекты?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...