2015-10-03 1 views
1

Это со ссылкой на JPA 2.0: Adding entity classes to PersistenceUnit *from different jar* automatically и Unable to call Hibernate/QueryDSL from another maven subprojectКак использовать Integrator службу в Hibernate 5 для добавления аннотированных классов

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

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

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

} 

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

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

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

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

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

ответ

0

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

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

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