我知道这是一个老问题,但它真的困住了我。
我接受了使用classLoader获取inputream的建议,代码如下:
public static Session getSession() {
if (sessionFactory == null) {
InputStream xmlInputStream =
ResourceUtil.getInputStream(HibernateDBUtil.class, CFG_XML);
Scanner scanner = new Scanner(xmlInputStream);
//just a test I can read the xml file ,print content here
while(scanner.hasNext()) System.out.println(scanner.nextLine());
scanner.close();
//reget the stream
xmlInputStream =
ResourceUtil.getInputStream(HibernateDBUtil.class, CFG_XML);
Configuration cfg = new Configuration();
cfg.addInputStream(xmlInputStream).configure();
// version 4.3 's way to config
StandardServiceRegistryBuilder builder =
new StandardServiceRegistryBuilder().applySettings
(cfg.getProperties());
StandardServiceRegistryImpl registry =
(StandardServiceRegistryImpl) builder.build();
sessionFactory = cfg.buildSessionFactory(registry);
}
return sessionFactory.openSession();
}
private static SessionFactory sessionFactory;
private static final String CFG_XML = "properties/hibernate.cfg.xml";
我确认ResourceUtil.getInputStream工作正常,因为我可以打印hibernate.cfg.xml的内容,但为什么还是给我错误:
更新 完整堆栈跟踪:
信息:HHH000412:Hibernate Core {4.3.0.Final} 2014年1月10日下午11:33:43 org.hibernate.cfg.Environment
信息:HHH000206:未找到hibernate.properties 2014年1月10日11:33:43 PM org.hibernate.cfg.Environment buildBytecodeProvider
信息:HHH000021:字节码提供商名称:javassist 2014年1月10日 11:33:44 PM org.hibernate.cfg.Configuration配置INFO:HHH000043: 从资源配置:/hibernate.cfg.xml 2014年1月10日下午11:33:44 org.hibernate.cfg.Configuration getConfigurationInputStream
信息:HHH000040:配置资源:/hibernate.cfg.xml异常 在线程“main”org.hibernate.HibernateException:/hibernate.cfg.xml中 找不到 org.hibernate.internal.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:173)atorg.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:2093) 在org.hibernate.cfg.Configuration.configure(Configuration.java:2074) 在org.hibernate.cfg.Configuration.configure(Configuration.java:2054) 在 cn.edu.gdut.utils.HibernateDBUtil.getSession(HibernateDBUtil.java:49) 在 cn.edu.gdut.utils.HibernateDBUtil.listBasicElement(HibernateDBUtil.java:25) 在cn.edu.gdut.utils.HibernateDBUtil.main(HibernateDBUtil.java:20)
答案 0 :(得分:1)
我认为,文件在IDE中的位置并不重要。重要的是文件将在执行期间的最终包中。
所以,假设你的properties/
文件夹应该成为执行包的根。这样,因为hibernate.cfg.xml在properties/
中,那么它应该在执行期间在根目录中。你能尝试使用
private static final String CFG_XML = "hibernate.cfg.xml";
<强>更新强>
Configuration cfg = new Configuration();
cfg.configure("hibernate.cfg.xml");
下面你的代码继续。在hibernate.cfg.xml
我提到<mapping resource="pkg/name/of/mapping/file/file.hbm.xml" />