Как использовать службу Integrator в Hibernate 5 для добавления аннотированных классов

Это со ссылкой на JPA 2.0: Добавление классов сущностей в PersistenceUnit *из другого jar* автоматически и Невозможно вызвать Hibernate/QueryDSL из другого подпроекта maven

Кажется, в Hibernate 4 был отличный способ динамической загрузки классов сущностей с помощью службы org.hibernate.integrator.spi.Integrator.

Теперь при использовании Hibernate 5 метод интеграции интерфейса Integrator дает мне

public void integrate(Metadata metadata, SessionFactoryImplementor sessionFactory,
        SessionFactoryServiceRegistry serviceRegistry)
{

}

Где метаданные имеют тип org.hibernate.boot.Metadata

Я не могу вызвать addAnnotatedClass() и не могу получить исходный объект конфигурации, который был в Hibernate 4.

Как мне обойти это?

Я использую maven и причал.

Я не использую пружину (поэтому, пожалуйста, не предоставляйте решение на основе пружины)


person user2250246    schedule 03.10.2015    source источник


Ответы (1)


На самом деле это было связано с тем, с чем я боролся на выходных, пытаясь угнаться за Hibernate 5. Вы можете прочитать о запланированных изменениях, связанных с классом Configuration, в последний документ Javadoc для Hibernate 4. Новое место для получения информации обо всех загруженных классах объектов, включая аннотированные объекты, — это упомянутый вами класс Metadata. Он имеет getEntityBindings() метод, который вернет представление метаданных сущности PersistentClass для всех известных сущностей. Однако этот Collection неизменен.

Рекомендуется переосмыслить использование Integrator для добавления привязок сущностей во время выполнения. Это могло работать в прошлом, но документы ясно указывают на то, что это не было преднамеренным, поскольку это должно быть сделано во время инициализации. Metadata и SessionFactoryImplementor по большей части являются неизменяемыми после сборки, и поэтому предполагаемая цель Integrator состоит не в том, чтобы изменять эти элементы конфигурации, а вместо этого использовать их в качестве информации о том, как настроить новые интеграции Service с помощью SessionFactoryServiceRegistry.

И если вас раздражает настройка Session для поиска всех ваших аннотированных классов во время выполнения, я предлагаю вам попробовать использовать EntityManagerFactory для инициализации Hibernate, поскольку он намного проще и использует стандартный синтаксис JPA, который при необходимости можно переключить на несколько других поставщиков. Это автоматически просканирует аннотированные объекты от вашего имени. API немного упрощен и ограничен, но если вам действительно когда-нибудь понадобятся возможности родной функциональности Hibernate, есть способ доступ к собственному базовому API.

person Wolfgang    schedule 18.10.2015