So laden Sie hibernate.cfg.xml aus einem anderen Verzeichnis

So laden Sie hibernate.cfg.xml aus einem anderen Verzeichnis

Die XML-Konfigurationsdatei im Ruhezustand "hibernate.cfg.xml" wird außerhalb eines Pakets immer im Stammverzeichnis Ihres Projektklassenpfads abgelegt. Wenn Sie diese Konfigurationsdatei in einem anderen Verzeichnis ablegen, kann der folgende Fehler auftreten:

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

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

Um Hibernate zu bitten, in einem anderen Verzeichnis nach Ihrer Datei "hibernate.cfg.xml" zu suchen, können Sie die Standardklasse "SessionFactory" von Hibernate ändern, indem Sie den Dateipfad "hibernate.cfg.xml" als Argument anconfigure()übergeben ) s Methode:

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

            return sessionFactory;

HibernateUtil.java

Vollständiges Beispiel inHibernateUtil.java, um "hibernate.cfg.xml" aus dem Verzeichnis "/com/example/persistence/" zu laden.

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/example/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();
    }

}

Erledigt.