我在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加载器?
答案 0 :(得分:3)
这里有几个问题。
首先,这个:
Configuration configuration = new Configuration().configure(ABS_PATH_TO_CONFIG+File.separator+"hibernate.cfg.xml");
不符合你的想法。
您的示例不检查配置文件的可用性。它检查文件是否存在于文件系统上,而不是在类路径中。这种差异很重要。
在不了解更多关于如何构建和部署Web应用程序或如何组织文件的情况下,除了尝试将“hibernate.cfg.xml”复制到类路径的根目录之外,很难再给出更具体的建议,并将其传递给configure()方法。这应该有用。
所以你的代码应该是:
Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
您的hibernate.cfg.xml文件应位于类路径的根目录中。
或者,如果您正在使用Maven,只需将其放在“resources”文件夹下,Maven就应该为您完成剩下的工作。
答案 1 :(得分:1)
我会告诉你,程序永远不会对你不好。 关于你的问题,你可以这样做以获得配置文件的路径:
String basePath = PropertiesUtil.class.getResource("/").getPath();
然后阅读
InputStream in = new FileInputStream(basePath + fileName);
祝你好运!
答案 2 :(得分:1)
这样就加载了定制配置文件:
File conf = new File(ABS_PATH_TO_CONFIG+File.separator+"hibernate.cfg.xml");
Configuration configuration = new Configuration().configure(conf.getAbsoluteFile());
FYC:configure()
方法过载