С Spring 4 и Hibernate 4 я смог использовать Reflection, чтобы получить объект конфигурации Hibernate из текущей среды, используя этот код:
@Autowired LocalContainerEntityManagerFactoryBean lcemfb;
EntityManagerFactoryImpl emf = (EntityManagerFactoryImpl) lcemfb.getNativeEntityManagerFactory();
SessionFactoryImpl sf = emf.getSessionFactory();
SessionFactoryServiceRegistryImpl serviceRegistry = (SessionFactoryServiceRegistryImpl) sf.getServiceRegistry();
Configuration cfg = null;
try {
Field field = SessionFactoryServiceRegistryImpl.class.getDeclaredField("configuration");
field.setAccessible(true);
cfg = (Configuration) field.get(serviceRegistry);
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
SchemaUpdate update = new SchemaUpdate(serviceRegistry, cfg);
С Hibernate 5, я должен использовать некоторые MetadataImplementor
, которые, похоже, не доступны ни с одним из этих объектов. Я также попытался использовать MetadataSources
с serviceRegistry
. Но он сказал, что это неправильный тип serviceRegistry
.
Есть ли другой способ заставить это работать?