![](/img/trans.png)
[英]Hibernate Migration from 4.3.x to 5.x for method org.hibernate.cache.spi.GeneralDataRegion.get(Object key)
[英]Hibernate Migration from 4.3.x to 5.x for method 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<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
獲取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<PersistentClass> entityBindings = metadata.getEntityBindings();
Iterator<PersistentClass> iterator = entityBindings.iterator();
while (iterator.hasNext()) {
PersistentClass persistentClass = iterator.next();
//do somthing
}
這在Hibernate 5.0遷移指南以及Hibernate用戶指南中的Bootstrap章節中進行了討論 (特別參見“Legacy Bootstrapping”附錄)。
簡而言之,雖然直接引導仍然支持Configuration,但如果要“掛鈎”引導過程,則必須使用新的引導API。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.