Ниже приведен опыт работы с hibernate 4.0.0.Final.
Javadoc (распространяется по лицензии LGPL) класса org.hibernate.cfg.Configuration
утверждает, что:
ПРИМЕЧАНИЕ: это будет заменено использованием ServiceRegistryBuilder
и
org.hibernate.metamodel.MetadataSources
вместо этого после выпуска 4.0, в этот момент этот класс устареет и будет удален в 5.0. См. HHH-6183 , HHH-2578 и
HHH-6586 для деталей
После просмотра проблемы 2578 я использовал что-то вроде этого:
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().configure().buildServiceRegistry();
MetadataSources metadataSources = new MetadataSources(serviceRegistry);
metadataSources.addResource("some_mapping.hbm.xml")
SessionFactory sessionFactory = metadataSources.buildMetadata().buildSessionFactory();
Чтобы начать чтение конфигурации, мне пришлось изменить файлы конфигурации и отображения hibernate 3.2.6 для использования xmlns="http://www.hibernate.org/xsd/hibernate-configuration"
и xmlns="http://www.hibernate.org/xsd/hibernate-mapping"
, а также удалить спецификации dtd.
Я не смог найти способ проверить сопоставления, определенные в hibernate.cfg.xml и hibernate. Префикс для свойств, связанных с hibernate в hibernate.cfg.xml is больше не является обязательным.
Для некоторых это может работать.
Я, например, столкнулся с некоторой ошибкой, поскольку файлы сопоставления содержали <cache usage="read-write" />
и в конечном итоге использовали устаревший способ конфигурации:
Configuration configuration = new Configuration().configure();
SessionFactoryImpl sessionFactory = (SessionFactoryImpl) configuration.buildSessionFactory();
EventListenerRegistry listenerRegistry = sessionFactory.getServiceRegistry().getService(EventListenerRegistry.class);
SolrIndexEventListener indexListener = new SolrIndexEventListener(); // a SaveOrUpdateEventListener i wanted to attach
listenerRegistry.appendListeners(EventType.SAVE_UPDATE, indexListener);
Мне пришлось программно добавлять прослушиватели событий, потому что Конфигурация больше не ищет их в hibernate.cfg.xml