在Hibernate 4.3.x中,有一个类getClassMapping(className)
的方法org.hibernate.cfg.Configuration
。
但在Hibernate 5.x中,此getClassMapping(className)
方法已从Configuration
类中删除。
Hibernate-5中的代码替换是什么?
请帮助解决此迁移问题。
答案 0 :(得分:5)
我posted到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<MetadataImplementor> 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
答案 1 :(得分:2)
获取PersisterCreationContext的对象,然后尝试: -
remote.findByCssSelector(".foo")
请检查此link(示例3.8。本机引导 - 全部放在一起)以了解如何在remote.findAllByCssSelector(".foo")
现在我们正在从persisterCreationContext中提取元数据,现在我们已经拥有它,所以我们可以立即获得任何实体所需的PersistentClass对象
document.querySelector(".foo")
答案 2 :(得分:1)
在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<PersistentClass> entityBindings = metadata.getEntityBindings();
Iterator<PersistentClass> iterator = entityBindings.iterator();
while (iterator.hasNext()) {
PersistentClass persistentClass = iterator.next();
//do somthing
}
答案 3 :(得分:0)
这在Hibernate 5.0 Migration Guide以及Bootstrap chapter in the Hibernate User Guide中进行了讨论(特别参见"Legacy Bootstrapping"附录)。
简而言之,虽然直接引导仍支持Configuration,但如果要“挂钩”引导过程,则必须使用新的引导API。