簡體   English   中英

Hibernate從4.3.x遷移到5.x,用於方法org.hibernate.cfg.Configuration.getClassMapping(className)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM