批量删除具有给定属性的所有实体

时间:2018-09-16 14:47:11

标签: java xodus

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

@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 :(得分:1)

  

我了解Xodus是事务性的,并且如果此处的deleteProperty操作之一失败,它将回滚(我可能需要知道是否已确认)。

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

  

仍然,有一种正式的方法可以删除给定类型的所有现有实体的属性吗?

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