EntityStoreException: неподдерживаемый идентификатор типа свойства 9

#java #xodus

#java #xodus

Вопрос:

Использование версии 1.3.124 Xodus и базы данных выбрасывает:

 jetbrains.exodus.entitystore.EntityStoreException: Unsupported property type id 9
    at jetbrains.exodus.entitystore.tables.PropertyTypes.getPropertyType(PropertyTypes.java:56)
    at jetbrains.exodus.entitystore.tables.PropertyTypes.entryToPropertyValue(PropertyTypes.java:86)
    at jetbrains.exodus.entitystore.PersistentEntityStoreImpl.getPropertyValue(PersistentEntityStoreImpl.java:843)
    at jetbrains.exodus.entitystore.PersistentEntityStoreImpl.getProperty(PersistentEntityStoreImpl.java:827)
    at jetbrains.exodus.entitystore.PersistentEntity.getProperty(PersistentEntity.java:114)
  

Несмотря на то, что свойство зарегистрировано:

 @Override
  public PersistentEntityStore getPersistentEntityStore(String xodusRoot, String dir, boolean isReadOnly) {

    if(persistentEntityStoreCache == null) {
      persistentEntityStoreCache = buildPersistentEntityStoreCache();
    }
    PersistentEntityStore entityStore = persistentEntityStoreCache.get(xodusRoot   dir);
    if (entityStore == null) {
      Environment environment = getEnvironment(xodusRoot, dir);
      PersistentEntityStoreConfig config = new PersistentEntityStoreConfig();
      config.setManagementEnabled(false);
      config.setDebugSearchForIncomingLinksOnDelete(true);
      config.setRefactoringHeavyLinks(true);
      entityStore = PersistentEntityStores.newInstance(config, environment, "persistentEntityStore");
      PersistentEntityStore finalEntityStore = entityStore;
      entityStore.executeInTransaction(
              txn -> {
                finalEntityStore.registerCustomPropertyType(
                    txn, EmbeddedEntityIterable.class, EmbeddedEntityBinding.BINDING);
                finalEntityStore.registerCustomPropertyType(
                    txn, EmbeddedArrayIterable.class, EmbeddedEntityBinding.BINDING);
                persistentEntityStoreCache.put(xodusRoot   dir, finalEntityStore);
              });
    }
    PersistentEntityStore persistentEntityStore = persistentEntityStoreCache.get(xodusRoot   dir);
    return persistentEntityStore;
  }
  

И это свойство изначально было сохранено с:

 metaDataHashMap.put("uniqueProperties", uProperties);
finalEntity.setProperty(metadataProperty, new EmbeddedEntityIterable(metaDataHashMap));
  

Что здесь может быть не так?

Ответ №1:

Я нашел основную причину проблемы.

Первоначально EmbeddedEntityIterable is в разделе com.mybusiness.model.EmbeddedEntityIterable then был перемещен в com.my-new-business.model.EmbeddedEntityIterable

Это решило проблему. Тем не менее, у ит-узла должно быть средство для замены или, по крайней мере, замены ссылок в подобных случаях, когда модели перемещаются.

Комментарии:

1. В моем случае проблема была вызвана тем, что я использовал пользовательские типы (using PersistentEntityStore.registerCustomPropertyType() ) в некоторых транзакциях, но не в других.