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。