首页 > 解决方案 > 批量删除具有给定属性(或属性)的所有实体

问题描述

下面的代码是我们删除给定实体类型的属性的代码:

@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此处的操作之一失败,它将回滚(我可能需要知道这是否得到确认)。

不过,是否有官方方法可以删除给定类型的所有现有实体的属性?

标签: javaxodus

解决方案


我知道 Xodus 是事务性的,如果此处的其中一个 deleteProperty 操作失败,它将回滚(我可能需要知道这是否得到确认)。

对,是真的。StoreTransactionalExecutable执行那里的工作后,这里的事务将被刷新 。但是您可以分成EntityIterable批次(例如大小为 100)并在处理每个批次执行txn.flush()方法之后。不要忘记检查flush结果,因为它返回布尔值。

不过,是否有官方方法可以删除给定类型的所有现有实体的属性?

不,没有。只能像我上面描述的那样手动。


推荐阅读