从 Hibernate 3 迁移到 Hibernate 5:sessionFactory (MetadataImplementor) 为空

Migration from Hibernate 3 to Hibernate 5: sessionFactory (MetadataImplementor) is null

    public class EntityMetaData implements SessionFactoryBuilderFactory {

    // private static final ThreadLocal<MetadataImplementor> meta = new ThreadLocal<>();  // previously used, but did not work, so used HashMap

      private static final Map<String, MetadataImplementor> meta = new HashMap<>();
      private static final String METADATAKEY = "M";

    @Override
    public SessionFactoryBuilder getSessionFactoryBuilder(MetadataImplementor metadata, SessionFactoryBuilderImplementor defaultBuilder) {
    //  meta.set(metadata);

        meta.put(METADATAKEY, metadata);
        return defaultBuilder;  
    }

    public static MetadataImplementor getMeta() {
//        return meta.get();

        return meta.get(METADATAKEY);
    }
}

以上代码在本地环境的tomcat 8 中有效,但在生产环境的tomcat 8 中不能作为getMeta() 方法returns null.

在本地环境中,getSessionFactoryBuilder 方法在服务器启动时被调用,因此它在本地工作,但在生产环境中 getSessionFactoryBuilder 方法未被调用 getMeta() returns null.

如有任何帮助,我们将不胜感激。

请帮我解决这个问题。

终于找到答案了

这是一个编译问题。 META-INF 文件夹不在 classes 文件夹中,因此 metadata 在服务器启动期间未加载(意味着 getSessionFactoryBuilder 方法未被调用)。在本地环境中,META-INF 位于 classes 文件夹中。但在生产环境中它不可用,因此尝试编译 META-INF 并在 classes 文件夹中可用,然后它正在工作。