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

2022-09-01 19:32:04

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

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

请帮助解决此迁移问题。


答案 1

发布到Broadleaf Commerce,因为他们还需要:PersistentClass

我一直在使用Hibernate 5,其中一些更改....要获取元数据,现在使用服务加载程序:

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

答案 2

获取 PersisterCreationContext 的对象,然后尝试此操作 :-

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

请检查此链接示例3.8。本机引导 - 将它们放在一起)了解如何在中获取标准注册表,元数据和会话工厂Hibernate 5.x

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

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

推荐