Comment charger hibernate.cfg.xml depuis un répertoire différent

Le fichier de configuration XML d’Hibernate «` hibernate.cfg.xml` »est toujours placé à la racine du chemin de classe de votre projet, en dehors de tout package. Si vous placez ce fichier de configuration dans un autre répertoire, vous pouvez rencontrer le message d’erreur suivant:

Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not found

Exception in thread "main" java.lang.ExceptionInInitializerError
    at com.mkyong.persistence.HibernateUtil.buildSessionFactory(HibernateUtil.java:25)
    at com.mkyong.persistence.HibernateUtil.<clinit>(HibernateUtil.java:8)
    at com.mkyong.common.App.main(App.java:11)
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)
    at com.mkyong.persistence.HibernateUtil.buildSessionFactory(HibernateUtil.java:13)
    ... 2 more

Pour demander à Hibernate de rechercher votre fichier «` hibernate.cfg.xml` »dans un autre répertoire, vous pouvez modifier la classe` SessionFactory` par défaut de Hibernate en transmettant comme argument le chemin du fichier «` hibernate.cfg.xml` » configure () méthode:

            SessionFactory sessionFactory = new Configuration()
            .configure("/com/mkyong/persistence/hibernate.cfg.xml")
            .buildSessionFactory();

            return sessionFactory;

HibernateUtil.java

Exemple complet dans HibernateUtil.java , pour charger« hibernate.cfg.xml » à partir du répertoire « /com/mkyong/persistence/ ».

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

public class HibernateUtil {

    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
           //load from different directory
            SessionFactory sessionFactory = new Configuration().configure(
                    "/com/mkyong/persistence/hibernate.cfg.xml")
                    .buildSessionFactory();

            return sessionFactory;

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

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void shutdown() {
       //Close caches and connection pools
        getSessionFactory().close();
    }

}

Terminé.