如何使用 Xodus 删除实体类型?
How to delete Entity Type with Xodus?
这是我删除给定类型的所有实体的代码:
@Override
public boolean deleteEntities(String instance, final String storeName) {
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 result = txn.getAll(storeName);
final boolean[] hasError = {false};
for(Entity entity : result) {
if(!entity.delete()) {
hasError[0] = true;
}
}
success[0] = !hasError[0];
}
});
} finally {
////entityStore.close();
}
return success[0];
}
问题:
- 这是删除给定实体类型的所有现有实体的正确方法吗?
- 执行此方法时,确实删除了所有实体,但实体类型仍然存在,如何正确删除实体类型?
有 PersistentEntityStore#renameEntityType
重命名实体类型作为 public api 的一部分。要完全删除实体类型,您可以使用 PersistentEntityStoreImpl#deleteEntityType
。它不是 PersistentEntityStore
api 的一部分,但方法是 public,您可以使用它。
此外,当您删除实体类型时,请不要忘记您还需要清除指向该类型实体的所有链接。
这是我删除给定类型的所有实体的代码:
@Override
public boolean deleteEntities(String instance, final String storeName) {
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 result = txn.getAll(storeName);
final boolean[] hasError = {false};
for(Entity entity : result) {
if(!entity.delete()) {
hasError[0] = true;
}
}
success[0] = !hasError[0];
}
});
} finally {
////entityStore.close();
}
return success[0];
}
问题:
- 这是删除给定实体类型的所有现有实体的正确方法吗?
- 执行此方法时,确实删除了所有实体,但实体类型仍然存在,如何正确删除实体类型?
有 PersistentEntityStore#renameEntityType
重命名实体类型作为 public api 的一部分。要完全删除实体类型,您可以使用 PersistentEntityStoreImpl#deleteEntityType
。它不是 PersistentEntityStore
api 的一部分,但方法是 public,您可以使用它。
此外,当您删除实体类型时,请不要忘记您还需要清除指向该类型实体的所有链接。