Пакетное удаление всех объектов с данным свойством (или свойствами) - PullRequest
0 голосов
/ 16 сентября 2018

Этот код ниже является нашим кодом для удаления свойства для данного типа сущности:

@Override
public boolean deleteProperty(String instance, String storeName, String propertyName) {
    final boolean[] success = {false};
    final PersistentEntityStore entityStore = manager.getPersistentEntityStore(xodusRoot, instance);
    try {
        entityStore.executeInTransaction(new StoreTransactionalExecutable() {
            @Override
            public void execute(@NotNull final StoreTransaction txn) {
                EntityIterable entities = txn.findWithProp(storeName, propertyName);
                final boolean[] hasError = {false};
                entities.forEach(entity -> {
                    if(!entity.deleteProperty(propertyName)) {
                        hasError[0] = true;
                    }
                });
                success[0] = hasError[0];
            }
        });
    } finally {
        //entityStore.close();
    }
    return success[0];
}

Я понимаю, что Xodus является транзакционным и что, если одна из операций deleteProperty здесь не будет выполнена, он будет откатан (Мне может понадобиться узнать, подтверждено ли это).

Тем не менее, существует ли официальный способ удаления свойства для всех существующих объектов данного типа?

1 Ответ

0 голосов
/ 18 сентября 2018

Я понимаю, что Xodus является транзакционным и что в случае сбоя одной из операций deleteProperty она будет откатываться (мне может понадобиться узнать, подтверждено ли это).

Да, этоправда.Здесь транзакция будет сброшена после того, как StoreTransactionalExecutable выполнит там задание.Но вы можете разбить EntityIterable на партии (например, размером 100) и после обработки каждой партии выполнить метод txn.flush().Не забудьте проверить результат flush, так как он возвращает логическое значение.

Тем не менее, существует ли официальный способ удаления свойства для всех существующих объектов данного типа?

Нет, нет.Только вручную, как я описал выше.

...