5

我正在尝试使用 Hibernate 和 Maven 启动项目。

我得到了这样的例外:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" org.hibernate.HibernateException: /hibernate.cfg.xml not found
    at org.hibernate.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:170)
    at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:2176)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2157)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2137)
    at FirstHibernate.com.myhib.CRUDS.CrudsOps.main(CrudsOps.java:15)

这是我的项目结构的屏幕截图,(hibernate.cfg.xml 在 src/ 中):http: //imageshack.us/photo/my-images/692/screenshotxba.jpg/

CrudsOps.java

package FirstHibernate.com.myhib.CRUDS;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class CrudsOps {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        SessionFactory sf = new Configuration().configure().buildSessionFactory();
        System.out.println("Cfg and hbm files loaded succesfully");
        Session session = sf.openSession();
        session.beginTransaction();
        System.out.println("Transaction began");

    }

}

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>FirstHibernate</groupId>
  <artifactId>com.myhib</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>com.myhib Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.6.8.Final</version>
    </dependency>
    <dependency>
        <groupId>postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.1-901.jdbc4</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>4.2.0.Final</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>com.myhib</finalName>
    <resources>
        <resource>
            <filtering>true</filtering>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
  </build>
</project>

什么可能是该异常的来源?

4

6 回答 6

16

正如@JBNizet 所说,你hibernate.cfg.xml应该在 src/main/resources 中。在 src 中,它不会被添加到运行时的类路径中。

如果您在 Eclipse 中运行您的项目,请不要忘记在构建路径配置中的项目首选项中检查src/main/resources是否没有从您的类路径中排除并且确实是一个源文件夹。

于 2013-03-06T22:27:26.673 回答
8

该文件应位于运行时类路径中。target/classesMaven 将 .目录下的资源复制到文件夹中src/main/resources。所以你的配置文件应该在那里。

也就是说,您没有显示加载文件的代码,因此可能存在其他问题。

于 2013-03-06T21:42:51.940 回答
1

您可以使用带有 hibernateConfig File 参数的 configure(File configFile) 方法从不同的目录(不一定是类路径)加载 hibernate.cfg.xml。(注意,我使用的是休眠 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);

于 2014-12-27T10:14:09.300 回答
0
For the People who are facing this issue while deploying on linux machine

您需要将 hibernate.cfg.xml 复制到您的战争项目的 classes 目录。

In Eclipse/Maven Project: (During Development)

您需要将 hibernate.cfg.xml 复制到 Eclipse/Maven 项目的 src 目录。

于 2015-08-17T02:51:04.280 回答
0

如果您在 Intellij Idea 中工作,则在 src\main\java 下创建一个名为“resources”的文件夹。打开项目的模块设置,从左侧选择“模块”,然后在“源”选项卡中选择新创建的“资源”文件夹并将其标记为“资源”。在此处输入图像描述

那么这应该工作

Configuration con = new Configuration().configure("hibernate.cfg.xml");
于 2017-10-23T06:01:39.007 回答
0

如果您使用的是Netbeans,请将您的hibernate.cfg.xml文件放入"Build > classes >"目录中,它将起作用。

于 2020-04-01T14:28:34.053 回答