Подтвердить что ты не робот

Hibernate Migration от 4.3.x до 5.x для метода org.hibernate.cfg.Configuration.getClassMapping(className)

В Hibernate 4.3.x существует метод getClassMapping(className) класса org.hibernate.cfg.Configuration. Но в Hibernate 5.x этот метод getClassMapping(className) удаляется из класса Configuration.

Какова будет замена кода в Hibernate-5?

Пожалуйста, помогите в этой проблеме миграции.

4b9b3361

Ответ 1

I опубликовано в Broadleaf Commerce, потому что они также нуждались в PersistentClass:

Я работал с Hibernate 5, и некоторые из этих изменений... Чтобы получить метаданные, теперь используйте Serviceloader:

package org.broadleafcommerce.openadmin.server.dao;

import org.hibernate.boot.SessionFactoryBuilder;
import org.hibernate.boot.spi.MetadataImplementor;
import org.hibernate.boot.spi.SessionFactoryBuilderFactory;
import org.hibernate.boot.spi.SessionFactoryBuilderImplementor;

public class EntityMetaData implements SessionFactoryBuilderFactory {

    private static final ThreadLocal<MetadataImplementor> meta = new ThreadLocal<>();

    @Override
    public SessionFactoryBuilder getSessionFactoryBuilder(MetadataImplementor metadata, SessionFactoryBuilderImplementor defaultBuilder) {
        meta.set(metadata);
        return defaultBuilder;
    }

    public static MetadataImplementor getMeta() {
        return meta.get();
    }
}

Вам понадобится файл:

/resources/META-INF/services/org.hibernate.boot.spi.SessionFactoryBuilderFactory

с полным именем класса, которое в моем примере:

org.broadleafcommerce.openadmin.server.dao.EntityMetaData

Ответ 2

Получить объект PersisterCreationContext, а затем попробовать следующее: -

PersistentClass persistentClass = 
persisterCreationContext.getMetadata().getEntityBinding(className);

Проверьте эту ссылку (Пример 3.8. Родительский загрузочный старт - соединяя все вместе), чтобы понять, как получить standardRegistry, metadata и sessionFactory в Hibernate 5.x

Теперь, когда мы вытаскивали метаданные из persisterCreationContext, и теперь у нас уже есть это, поэтому мы можем сразу получить требуемый объект PersistentClass любого объекта с помощью

SessionFactory sessionFactory = metadata.getSessionFactoryBuilder().build();
PersistentClass persistentClass = metadata.getEntityBinding(className);

Ответ 3

Это обсуждается в Hibernate 5.0 Migration Guide, а также Раздел Bootstrap в Руководстве пользователя Hibernate (см., В частности, "Наследие загрузки" ).

Короче говоря, хотя конфигурация по-прежнему поддерживается для прямой загрузки, если вы хотите "подключиться" к процессу начальной загрузки, вам придется использовать новые API-интерфейсы для начальной загрузки.

Ответ 4

В Hibernate 3 и 4 вы сделаете что-то вроде этого

URL configFileURL = getResource(); //some method to get hold of the location of your hibernate.cfg.xml
Configuration configuration = (new Configuration()).configure(configFileURL);
Iterator classMappings = configuration.getClassMappings();
  while (classMappings.hasNext()) {
    PersistentClass persistentClass = (PersistentClass) classMappings.next();
    //do somthing 
    }

В Hibernate 5 initialize Метаданные, подобные этому

URL configFileURL = getResource(); //some method to get hold of the location of your hibernate.cfg.xml
StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().configure(configFileURL).build();
Metadata metaData = new MetadataSources(standardRegistry).getMetadataBuilder().build();

И используйте getEntityBindings() для метаданных

Collection<PersistentClass> entityBindings = metadata.getEntityBindings();
Iterator<PersistentClass> iterator = entityBindings.iterator();
  while (iterator.hasNext()) {
    PersistentClass persistentClass = iterator.next();    
    //do somthing
  }