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

时间:2016-07-20 06:59:34

标签: metadata tomcat8 spring-4 sessionfactory hibernate-5.x

    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()方法不起作用。

在本地环境中,在服务器启动时调用getSessionFactoryBuilder方法,以便它在Local中工作,但在生产环境中getSessionFactoryBuilder方法未调用getMeta()返回{{1} }}

任何帮助都可以得到赞赏。

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

最后我找到了答案。

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