web-dev-qa-db-fra.com

org.hibernate.HibernateException: /hibernate.cfg.xml introuvable

J'essaie d'utiliser hibernate avec le printemps 3 mvc, mais pour le moment, cette exception est levée. Je pense que je dois définir mon hibernate.cfg.xml quelque part, mais je ne sais pas où?

J'ai essentiellement suivi cet exemple ici http://www.nabeelalimemon.com/blog/2010/05/spring-3-integrated-with-hibernate-part-a/ Et particulièrement vu cette ligne de code suppose de "magiquement" trouver mon fichier hibernate.cfg en utilisant ceci:

return new Configuration().configure().buildSessionFactory();

Je suppose que ce n'est pas correct? J'ai actuellement mon fichier hibernate.cfg dans src/com/jr/hibernate/

ci-dessous est mon fichier cfg:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
  <session-factory>
    <!-- Database connection settings -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306/racingleague</property>
    <property name="connection.username">username</property>
    <property name="connection.password">password</property>
    <property name="hibernate.format_sql">true</property>
    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>
    <!-- SQL dialect -->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <!-- Enable Hibernate's automatic session context management -->
    <property name="current_session_context_class">thread</property>
    <!-- Disable the second-level cache  -->
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    <!-- Echo all executed SQL to stdout -->
    <property name="hibernate.show_sql">true</property>
    <!-- Drop and re-create the database schema on startup -->
    <property name="hibernate.hbm2ddl.auto">update</property>
    <!--property name="hbm2ddl.auto">update</property-->
    <mapping resource="com/jr/model/hibernateMappings/user.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

mon cours d'hibernation utils:

package com.jr.utils;

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

public class HibernateUtils {

     private static final SessionFactory sessionFactory = buildSessionFactory();

      public static SessionFactory buildSessionFactory() {
        try {
          // Create the SessionFactory from hibernate.cfg.xml
          return new Configuration().configure().buildSessionFactory();
        }
        catch (Throwable ex) {
          // Make sure you log the exception, as it might be swallowed
          System.err.println("Initial SessionFactory creation failed." + ex);
          throw new ExceptionInInitializerError(ex);
        }
      }

}

qui s'appelle bu cette classe abstraite:

package com.jr.db;

import org.hibernate.SessionFactory;
import org.hibernate.classic.Session;

import com.jr.utils.HibernateUtils;

public abstract class DbWrapper<T> {

    private static SessionFactory sessionFactory = null;
    private static Session session;

    public DbWrapper() {
        setSessionFactory();
    }

    private void setSessionFactory() {
        sessionFactory = HibernateUtils.buildSessionFactory();
        session = sessionFactory.getCurrentSession();
    }

    public boolean addNewItem(T dbItem) {

        try {
            session.getTransaction().begin();
            session.save(dbItem);
            session.getTransaction().commit();
        } catch (Exception e) {
            System.err.println("error exception when adding new item to table"
                    + e);
        } finally {

            session.close();
            sessionFactory.close();
        }

        return false;

    }

    public abstract boolean removeItem(String uid);

    public abstract boolean modifyItem(String uid, T item);

}

Et voici le contrôleur qui fait à l'origine des choses en veille prolongée:

private Logger logger = Logger.getLogger(UserController.class);

    private UserDb userDb;

@RequestMapping(value = "/user/registerSuccess", method = RequestMethod.POST)
public String submitRegisterForm(@Valid User user, BindingResult result) {

    // validate the data recieved from user
    logger.info("validate the data recieved from user");
    if (result.hasErrors()) {
        logger.info("form has "+result.getErrorCount()+" errors");

        return "account/createForm";
    } else{
        // if everthings ok, add user details to database
        logger.info("if everthings ok, add user details to database");

        userDb = new UserDb();

        userDb.addNewItem(user);

        // display success and auto log the user to the system.
        return "account/main";
    }

}

Bravo d'avance. J'ai également tous mes mappages xml de table hibvernate au même emplacement que mon fichier hibernate.cfg.xml

10
jonney

Au lieu de placer le fichier hibernate.cfg.xml dans le répertoire src/com/jr/hibernate/, placez-le dans le répertoire src. Il apparaîtra alors automatiquement dans le répertoire WEB-INF/classes, comme mentionné par les gens ici.

26
limc

hibernate.cfg.xml doit être trouvé dans la racine du classpath lorsque l'application Web est démarrée.

Si vous utilisez maven pour générer le projet, placez hibernate.cfg.xml dans le répertoire src/main/resources afin que, lorsque vous construisez le package war, celui-ci soit automatiquement placé dans /WEB-INF/classes.

Si vous n'utilisez pas maven, placez le fichier directement dans votre répertoire WEB-INF/classes.

13
guido

hibernate.cfg.xml devrait être dans WEB-INF/classes. Sinon, vous pouvez le charger à partir d'un emplacement personnalisé en passant l'argument correspondant à la méthode configure(..).

3
Bozho

Si vous utilisez Maven, vous devez placer le fichier hibernate.cfg.xml dans le chemin suivant /src/main/Java/resources/hibernate.cfg.xml dans Intellij IDEA. Ensuite, dans votre classe d'application d'exécution, insérez simplement la ligne:

SessionFactory factory = new Configuration (). Configure ("hibernate.cfg.xml"). AddAnnotatedClass (). BuildSessionFactory ();

2
DevMario

Même si j'avais hibernate.cfg.xml sous le dossier src, je reçois 

 org.hibernate.HibernateException: /hibernate.cfg.xml not found

après avoir exécuté mvn clean install. Avec Try and error, j'ai pu résoudre le problème en supprimant hibernate.cfg.xml de src plié et en ajouter un autre. Exécutez l'application (c'est une classe principale dans mon cas). Pendant ce temps, j'ai toujours l'erreur. et ajoutez-le à nouveau au dossier src et rhum la classe principale. It worked!

0
tadtab

J'ai le même problème et déplacé hibernate.cfg.xml dans le répertoire src/main/resources résolu, il sera automatiquement placé dans/WEB-INF/classes.

0
Felipe Moura

Dans IntelliJ, sélectionnez "Ouvrir les paramètres du projet" >> Modules >> Hibernate et ciblez votre fichier hibernate.cfg.xml utilisé dans votre projet.

0
Epredator