Hibernate从4.3.x迁移到5.x,用于方法org.hibernate.cfg.Configuration.getClassMapping(className)

在Hibernate 4.3.x中,有一个类org.hibernate.cfg.Configuration getClassMapping(className)方法。 但是在Hibernate 5.x中,这个getClassMapping(className)方法已从Configuration类中删除。

Hibernate-5中的代码替换是什么?

请帮助解决此迁移问题。

我发布到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 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 

获取PersisterCreationContext的对象,然后尝试: –

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

请检查此链接 ( 示例3.8。本机Bootstrapping – 将所有内容放在一起 )以了解如何在Hibernate 5.x获取standardRegistry,metadata和sessionFactory

现在,当我们从persisterCreationContext中提取元数据时,现在我们已经拥有它,所以我们可以立即获取任何实体所需的PersistentClass对象

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

在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中初始化元数据就像这样

 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 entityBindings = metadata.getEntityBindings(); Iterator iterator = entityBindings.iterator(); while (iterator.hasNext()) { PersistentClass persistentClass = iterator.next(); //do somthing } 

这在Hibernate 5.0迁移指南以及Hibernate用户指南中的Bootstrap章节中进行了讨论 (特别参见“Legacy Bootstrapping”附录)。

简而言之,虽然直接引导仍然支持Configuration,但如果要“挂钩”引导过程,则必须使用新的引导API。