从 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
文件夹中可用,然后它正在工作。
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
文件夹中可用,然后它正在工作。