首页 > 解决方案 > 如何防止“实体商店未设置”异常

问题描述

我有这段代码可以获取第一个实体,

@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.即使没有实体或实体类型,您如何防止抛出此类异常。

标签: javaxodus

解决方案


推荐阅读