java - 批量删除具有给定属性(或属性)的所有实体
问题描述
下面的代码是我们删除给定实体类型的属性的代码:
@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
此处的操作之一失败,它将回滚(我可能需要知道这是否得到确认)。
不过,是否有官方方法可以删除给定类型的所有现有实体的属性?
解决方案
我知道 Xodus 是事务性的,如果此处的其中一个 deleteProperty 操作失败,它将回滚(我可能需要知道这是否得到确认)。
对,是真的。StoreTransactionalExecutable
执行那里的工作后,这里的事务将被刷新 。但是您可以分成EntityIterable
批次(例如大小为 100)并在处理每个批次执行txn.flush()
方法之后。不要忘记检查flush
结果,因为它返回布尔值。
不过,是否有官方方法可以删除给定类型的所有现有实体的属性?
不,没有。只能像我上面描述的那样手动。
推荐阅读
- solr - Solr 服务器突然停止而没有任何错误
- javascript - google.language API 不再可用
- java - 取消 GWT 重复定时器
- javascript - 如何在所有具有相同 id 的 td 上输出值?
- javascript - 使用 javascript [500 (Internal Server Error)] 从 php 数据在谷歌地图上设置标记
- robotframework - 如何将一长串论点分解成几条短线?
- python - 选择列不为空且等于(字符串)值的行
- c# - 在电子邮件中添加多行集合文本
- c# - 通知 Windows 10 开始菜单更改
- sonata-admin - Symfony 3.4 - SonataUser - Twig - 空白页