Hibernate可以读取hibernate.cfg.xml的内容但仍会出错吗?

时间:2014-01-10 13:40:21

标签: java hibernate

我知道这是一个老问题,但它真的困住了我。

我接受了使用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)   

1 个答案:

答案 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" />