2016-06-14 13 views
0

ich mein Projekt mit den Eclipse-IDE gebaut, und legten meine hibernate.cfg.xml Datei im resources Ordner (Abbildung unten):Hibernate halten die Suche nach Konfigurationsdatei in einem anderen Ort

enter image description here


Das Problem tritt auf, wenn ich versuche, in meinen DAO-Klassen auf hibernate.cfg.xml zu verweisen. Hier ist ein Ausschnitt aus meinem Code, wo ich mein SessionFactory erhalten:

DAO getSessionFactory() Beispiel

private static SessionFactory getSessionFactory() { 
     String hibernatePropsFilePath = "src/main/resources/hibernate.cfg.xml"; 
     File hibernatePropsFile = new File(hibernatePropsFilePath); 

     Configuration configuration = new Configuration(); 
     configuration.configure(hibernatePropsFile); 
     configuration.addAnnotatedClass(MyClass.class); 

     StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder() 
       .applySettings(configuration.getProperties()); 
     ServiceRegistry serviceRegistry = serviceRegistryBuilder.build(); 

     return configuration.buildSessionFactory(serviceRegistry); 
    } 

Wie Sie sehen können, bin ich immer noch auf die „richtige“ Stelle in meinem Projekt zeigen jedoch, wenn ich Postman Test, erhalte ich folgende Fehlermeldung:

HTTP Status 500 - Request processing failed; nested exception is org.hibernate.internal.util.config.ConfigurationException: Specified cfg.xml file [C:\Users\MYUSERNAME\Desktop\src\main\resources\hibernate.cfg.xml] does not exist

Meine Frage: Warum ist es ständig in meinem Desktop-f suchen oder meinen Dateipfad, und wie ändere ich das, um nur in meinem Projekt zu sehen? Ich checkte und sorgte dafür, dass meine Ressourcen Pfad in meinem Web Deployment Assembly (Abbildung unten) vorhanden ist:

enter image description here

+1

Haben bauen Sie versuchen, ohne den Pfad angeben? Verwenden Sie einfach 'Konfigurationskonfiguration = neue Konfiguration(). Configure(); StandardServiceRegistryBuilder-Builder = new StandardServiceRegistryBuilder(). applySettings (configuration.getProperties()); SessionFactory factory = configuration.buildSessionFactory (builder.build()); ' –

+0

@ChetanJadhavCD dies funktioniert, danke! Seltsam, warum es jetzt funktioniert (versuchte das vor einer langen Zeit) – abhi

Antwort

4

src/main Maven spezifische Projektstruktur ist die Quelldateien zu ordnen. Aber nach dem Build werden die kompilierten Klassen und Ressourcendateien in das Verzeichnis WEB-INF/classes/ kopiert.

Angenommen, Sie verwenden maven und Ihre resources Ordner Teil der source Struktur ist, dann wird die XML-Datei in WEB-INF/classes/resources Ordner kopiert werden.

den Pfad ändern zu String hibernatePropsFilePath = "/resources/hibernate.cfg.xml";

Update:

Nach einem zweiten Blick auf Ihrer Web Deployment Assembly Einstellungen Bildaufnahme, Ihre main/resources Ordner classes Verzeichnis zugeordnet werden nicht classes/resources. Ändern Sie den Code wie folgt ohne Verwendung von File.

Configuration configuration = new Configuration("hibernate.cfg.xml"); 
    configuration.addAnnotatedClass(ClientCrossRef.class);` 
    configuration.configure(); 

und noch bessere Sache ist, da Ihre cfg.xml Datei bereits Teil Classpath ist, brauchen Sie nicht einmal angeben. Hibernate sucht danach im Klassenpfad.

Und übrigens, können Sie die Sitzung Fabrik leicht als

SessionFactory sessionFactory = new Configuration().configure(
        "hibernate.cfg.xml") 
        .buildSessionFactory(); 
+0

Versuchte das, jetzt bekomme ich ein: 'HTTP Status 500 - Anfrage Verarbeitung fehlgeschlagen; Verschachtelte Ausnahme ist org.hibernate.internal.util.config.ConfigurationException: Angegebene cfg.xml-Datei [C: \ resources \ hibernate.cfg.xml] existiert nicht. Ich habe festgestellt, dass das Standardverzeichnis für die Klasse File C: \ Users \ MYUSERNAME \ Desktop ist. Könnte das auch das Problem sein? – abhi

+1

@TheApprentice Sie sollten niemals 'java.io.File' in einer Webanwendung verwenden. Die Hibernate 'Configure.configure()' Methode akzeptiert auch eine URL. Sie können 'getClass(). GetResource (" hibernate.cfg.xml ")' aufrufen, um die entsprechende URL zu erhalten. – markbernard

+0

Danke @Markbernard und K139. Ich schätze sowohl detaillierte Antworten als auch Erklärungen. Habe bereits Notizen dazu gemacht und meine Anwendung läuft wie vorgesehen. – abhi

Verwandte Themen