下面的代码是我们的代码,用于删除给定实体类型的属性:
@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
操作之一失败,它将回滚(我可能需要知道是否已确认)。
仍然,有一种正式的方法可以删除给定类型的所有现有实体的属性吗?
答案 0 :(得分:1)
我了解Xodus是事务性的,并且如果此处的deleteProperty操作之一失败,它将回滚(我可能需要知道是否已确认)。
是的,是的。 StoreTransactionalExecutable
执行完那里的工作后,这里的事务将被刷新。但是您可以将EntityIterable
拆分为多个批次(例如,大小为100),并在处理每个批次后执行txn.flush()
方法。不要忘记检查flush
结果,因为它返回布尔值。
仍然,有一种正式的方法可以删除给定类型的所有现有实体的属性吗?
不,没有。只能像我上面描述的那样手动。