【发布时间】:2014-01-29 12:22:21
【问题描述】:
我知道这是一个老问题,但它确实让我陷入了困境。
我接受了使用classLoader获取inputsream的建议,代码如下:
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:休眠核心 {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 配置信息:HHH000043: 从资源配置:/hibernate.cfg.xml 2014 年 1 月 10 日晚上 11:33:44 org.hibernate.cfg.Configuration getConfigurationInputStream
信息:HHH000040:配置资源:/hibernate.cfg.xml 异常 在线程“主”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)
【问题讨论】:
-
请提供完整的堆栈跟踪。
-
谢谢,查看完整的堆栈。我尝试使堆栈文本看起来更好但失败了,希望不会让你不高兴。
-
hibernate好像找不到你的hibernate.cfg.xml。尝试使用 CFG_XML 作为路径参数创建一个文件,并检查方法 getAbsolutePath() 将导致的位置。也许你的根目录有误?
-
谢谢。抱歉回复晚了。其实,在上面的代码中,我可以得到xmlInputstream的内容(看scanner,我可以读到内容),说明没有错。我用一个在 ResourceUtil 类中加载资源的类加载器,它可以与其他部分正常工作,例如图标和属性文件。但是 Hibernate 就是找不到 xmlInputStream,为什么?