找不到hibernate.cfg.xml

时间:2011-11-19 18:47:43

标签: java hibernate

我是Hibernate的新手,阅读本书“使用Hibernate实现Java持久性”,我试图从那里实现这个例子。到目前为止,我的Ant构建是成功的,但是当我尝试执行包含main方法的类时,我收到此错误消息:

19-Nov-2011 18:40:09 org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.2.3
19-Nov-2011 18:40:09 org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
19-Nov-2011 18:40:09 org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : cglib
19-Nov-2011 18:40:09 org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
19-Nov-2011 18:40:09 org.hibernate.cfg.Configuration configure
INFO: configuring from resource: /hibernate.cfg.xml
19-Nov-2011 18:40:09 org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: Configuration resource: /hibernate.cfg.xml
Exception in thread "main" java.lang.ExceptionInInitializerError
    at persistence.HibernateUtil.<clinit>(Unknown Source)
    at hello.Driver.main(Unknown Source)
Caused by: org.hibernate.HibernateException: /hibernate.cfg.xml not found
    at org.hibernate.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:147)
    at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:1405)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1427)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1414)
    ... 2 more

很明显,hibernate无法找到我的配置文件,它位于根目录中。

项目

+lib
<all required libraries>
+src
  +hello
    HelloWorld.java
    Message.java
    message.hbm.xml
  +persistence
    HibernateUtil.java
build.xml
hibernate.cfg.xml

我的完整源代码可以在这里找到:http://pastebin.com/bGDUrxUf

我有一个运行MySQL服务器,带有数据库hibernateapp和表消息

谢谢:)

7 个答案:

答案 0 :(得分:16)

hibernate.cfg.xml文件应该位于项目类路径的根目录中。如果您使用Maven,请确保它应该像src&gt;资源&gt; hibernate.cfg.xml中。

答案 1 :(得分:15)

您的hibernate.cfg.xml需要位于src目录中;否则它不会被Ant的copymetafiles目标覆盖,所以它不会在你编译的类路径中结束。

答案 2 :(得分:5)

它不应该在你的根目录中,它应该在你的类路径上。

答案 3 :(得分:2)

您可以使用hibernate.cfg.xml configure(File configFile)参数的hibernateConfig方法从其他目录(不一定是类路径)加载File。 (注意,我正在使用hibernate 4.3.7)

像这样:


String hibernatePropsFilePath = "/etc/configs/hibernate.cfg.xml";

File hibernatePropsFile = new File(hibernatePropsFilePath);

Configuration configuration = new Configuration(); 
configuration.configure(hibernatePropsFile);

StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());

ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();

SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);

答案 4 :(得分:2)

如果您正在处理Intellij Idea,请在src \ main \ java下创建一个名为“resources”的文件夹。打开项目的模块设置,从左侧选择“模块”,在“源”选项卡中选择新创建的“资源”文件夹并将其标记为“资源”。在这个新创建的“resources”文件夹中创建hibernate.cfg.xml文件。enter image description here

然后这应该工作

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

答案 5 :(得分:0)

虽然现在已经很晚了,但解决方案是您需要将此配置文件放在资源文件夹(projectxxxx-&gt; Resources)中,前提是它是一个maven项目。

答案 6 :(得分:0)

默认情况下,XML配置文件应位于CLASSPATH的根目录中。

您可以使用以下方法选择其他XML或路径配置文件:

        SessionFactory sessionFactory;
        try {
            Logger log = Logger.getLogger(LOG);
            final String HIB_CONFIG = "/path/to/hibernate.cfg.xml";

            final File hibernate = new File(HIB_CONFIG);
            log.info("Try to init SessionFactory: " + HIB_CONFIG);

            // Create the SessionFactory from hibernate.cfg.xml
            if (hibernate.exists()) {
                log.info("File exists. Init with custom file.");
                sessionFactory = new Configuration()
                        .configure(hibernate)
                        .buildSessionFactory();
            } else {
                log.info("File doesn't exist. Init with default project file.");
                sessionFactory = new Configuration().configure().buildSessionFactory();
            }
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }

有关更多信息,请访问session-configuration