Hibernate exception hibernate.cfg.xml not found

41,411

Solution 1

As @JBNizet said, your hibernate.cfg.xml should be in src/main/resources. In src, it won't be added to your classpath for runtime.

If you are running your project within Eclipse, don't forget in the project preferences in the build path configuration to check that the src/main/resources is not excluded from your class path and is indeed a source folder.

Solution 2

The file should be in the runtime classpath. Maven copies to the target/classes folder the resources that are under src/main/resources. So your config file should be there.

That said, you don't show the code which loads the file, so there might be other problems.

Solution 3

You can load hibernate.cfg.xml from a different directory (not necessarily the classpath) using the configure(File configFile) method that takes the hibernateConfig File argument. (note, am using hibernate 4.3.7)

Like this:


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);

Share:
41,411
devger
Author by

devger

Updated on July 05, 2022

Comments

  • devger
    devger almost 2 years

    I'm trying to start project with Hibernate and Maven.

    I got such exception:

    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)
    

    Here is the screenshot of my project structure, (hibernate.cfg.xml is in 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>
    

    What could be a source of that exception?

  • devger
    devger about 11 years
    Unfortunately, that didn't help. Updating my post with Java files.
  • JB Nizet
    JB Nizet about 11 years
    Can you find the hibernate.cfg.xml file under target/classes?
  • JB Nizet
    JB Nizet about 11 years
    Then either you ddn't rebuild your project with Maven, or you disabled the resource copying somehow in your pom.
  • devger
    devger about 11 years
    I did 'mvn package' command to rebuild project with Maven, is it correct? Posting my 'pom.xml'.
  • Naga Vemprala
    Naga Vemprala over 7 years
    Excellent analysis @benzonico . Thumbs up for the answer