java - 如何防止“实体商店未设置”异常
问题描述
我有这段代码可以获取第一个实体,
@Override
public Entity getFirstEntity(String entityType, String propertyName, PropertyCondition propertyCondition) throws EntityStoreException {
AtomicReference<Entity> atomicReference = new AtomicReference<>();
databaseManager.transactPersistentEntityStore(dir, true, txn -> {
try {
PropertyConditions propertyConditions = new PropertyConditions();
propertyConditions.put(propertyName, propertyCondition);
EntityIterable xdEntities = txn.getAll(entityType)
.intersect(checkConditions(txn.getAll(entityType), entityType,
propertyConditions));
Marshaller<Entity, jetbrains.exodus.entitystore.Entity> marshaller = new EntityXDMarshaller(txn);
jetbrains.exodus.entitystore.Entity xdEntity = xdEntities.getFirst();
Entity entity = xdEntity != null ? marshaller.marshall(xdEntity) : null;
atomicReference.set(entity);
} catch (Exception e) {
throw new EntityStoreException(e);
}
});
return atomicReference.get();
}
除非在拥有此类型的任何实体之前调用此方法,否则此方法有效。如果以其他方式调用,则抛出:
Caused by: java.lang.RuntimeException: EntityIterableBase: entity store is not set.
at jetbrains.exodus.entitystore.iterate.EntityIterableBase.getStore(EntityIterableBase.java:122)
at jetbrains.exodus.entitystore.iterate.TxnGetterStrategy$1.getTxn(TxnGetterStrategy.java:26)
at jetbrains.exodus.entitystore.iterate.EntityIterableBase.getTransaction(EntityIterableBase.java:151)
at jetbrains.exodus.entitystore.iterate.EntityIterableBase$1.getTransaction(EntityIterableBase.java:40)
entity store is not set.
即使没有实体或实体类型,您如何防止抛出此类异常。
解决方案
推荐阅读
- authentication - 如何在访问 Google App 的多个服务之间共享凭据
- vba - 如何将空白转换为制表符
- sas - SAS:IF 语句中的通配符
- javascript - 单击按钮本身不会播放视频
- autodesk-forge - 无法为 Autodesk BIM 360 docs 项目创建 webhook
- angularjs - 未在 ui-view 中加载的部分 html 之一
- docker - Spring Boot Docker com.netflix.discovery.shared.transport.TransportException:无法在任何已知服务器上执行请求
- text - 与 gedit 中的文本选择进行比较
- javascript - 从javascript数组变量设置元素oninput
- php - Htaccess 错误 404 子目录