繁体   English   中英

Hibernate无法读取hibernate.cfg.xml

[英]Hibernate can't read hibernate.cfg.xml

我正在Jetty 1.6上运行的GWT应用程序中使用Hibernate 4.1,获得了下一个代码以启动hib.instance:

Configuration configuration = new Configuration().configure(ABS_PATH_TO_CONFIG+File.separator+"hibernate.cfg.xml");
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);

第一行给我一个错误:

org.hibernate.HibernateException: ...hibernate.cfg.xml not found
at org.hibernate.internal.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:173)

但是我在加载hib.config之前检查了hibernate.cfg.xml可用性:

File conf = new File(ABS_PATH_TO_CONFIG+File.separator+"hibernate.cfg.xml");
System.out.println(conf.canRead());

Sysout返回true。

查看带有断点的ConfigHelper.getResourceAsStream源:

InputStream stream = null;
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader!=null) {
    stream = classLoader.getResourceAsStream( stripped );
}
if ( stream == null ) {
    stream = Environment.class.getResourceAsStream( resource );
}
if ( stream == null ) {
    stream = Environment.class.getClassLoader().getResourceAsStream( stripped );
}
if ( stream == null ) {
    throw new HibernateException( resource + " not found" );
}

我做错了什么(不明白什么)或这里真的没有xml加载器?

这里有几处错误。

首先,这是:

Configuration configuration = new Configuration().configure(ABS_PATH_TO_CONFIG+File.separator+"hibernate.cfg.xml");

不按照您的想法去做。

您的示例未检查配置文件的可用性。 它正在检查文件是否存在于文件系统中,而不存在于类路径中。 这种差异很重要。

在不了解有关如何构建和部署Webapp或如何组织文件的更多信息的情况下,除了尝试将“ hibernate.cfg.xml”复制到类路径的根目录之外,很难给您更具体的建议。将其传递给configure()方法。 那应该工作。

因此,您的代码应为:

Configuration configuration = new Configuration().configure("hibernate.cfg.xml");

您的hibernate.cfg.xml文件应该位于类路径的根目录中。

另外,如果您使用的是Maven,只需将其放在“ resources”文件夹下,剩下的就由Maven完成。

我会告诉您,该程序永远不会对您不利。 关于您的问题,您可以执行以下操作以获取配置文件的路径:

String basePath = PropertiesUtil.class.getResource("/").getPath();

然后阅读

InputStream in = new FileInputStream(basePath + fileName);

祝好运!

这种方式加载自定义配置文件:

File conf = new File(ABS_PATH_TO_CONFIG+File.separator+"hibernate.cfg.xml");
Configuration configuration = new Configuration().configure(conf.getAbsoluteFile());

FYC: configure()方法已重载

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM