web-dev-qa-db-fra.com

Emplacement de hibernate.cfg.xml dans le projet?

J'ai créé un projet avec la structure suivante:

enter image description here

HibernateUtil:

public class HibernateUtil {

    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            Configuration  configuration = new Configuration().configure( "C:\\Users\\Nikolay_Tkachev\\workspace\\hiberTest\\src\\logic\\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);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

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

}

à la ligne

Configuration  configuration = new Configuration().configure( "C:\\Users\\Nikolay_Tkachev\\workspace\\hiberTest\\src\\logic\\hibernate.cfg.xml");

J'ai une erreur

Création initiale de SessionFactory failed.org.hibernate.HibernateException: C:\Utilisateurs\Nikolay_Tkachev\espace de travail\hiberTest\src\logic\hibernate.cfg.xml not found Exception dans le fil "main" Java.lang.ExceptionInInitializerError à logic.HibernateUtil.buildSessionFactory (HibernateUtil.Java:19) à logic.HibernateUtil. (HibernateUtil.Java:9) à logic.Main.main (Main.Java:12) Causé par: org.hibernate.HibernateException: C:\Utilisateurs\Nikolay_Tkachev\espace de travail\hiberTest\src\logic\hibernate.cfg.xml introuvable à org.hibernate.internal.util.ConfigHelper.getResourceAsStream (ConfigHelper.Java:173) à org.hibernate.cfg.Configuration.getConfigurationInputStream (Configuration.Java:1947) à org.hibernate.cfg.Configuration.configure (Configuration.Java:1928) at logic.HibernateUtil.buildSessionFactory (HibernateUtil.Java:14) ... 2 plus

Quelle est la raison de l'erreur et comment puis-je la réparer?

20
gstackoverflow

Donnez le chemin relatif à votre projet.

Créez un dossier appelé resources dans votre src et placez-y votre fichier de configuration.

   configuration.configure("/resources/hibernate.cfg.xml");

Et si vous vérifiez votre code 

Configuration  configuration = new Configuration().configure( "C:\\Users\\Nikolay_Tkachev\\workspace\\hiberTest\\src\\logic\\hibernate.cfg.xml");
return new Configuration().configure().buildSessionFactory();

Sur deux lignes, vous créez deux objets de configuration.

Cela devrait fonctionner (non testé) si vous écrivez, 

Configuration  configuration = new Configuration().configure( "C:\\Users\\Nikolay_Tkachev\\workspace\\hiberTest\\src\\logic\\hibernate.cfg.xml");
return  configuration.buildSessionFactory();

Mais il échoue après le déploiement sur le serveur, puisque vous utilisez un chemin système plutôt qu'un chemin relatif au projet.

31
Suresh Atta

De toute façon, placer sous le dossier "src" ne fonctionnait pas pour moi.

Au lieu de placer cfg.xml comme ci-dessous:

[Project Folder]\src\main\resources\hibernate.cfg.xml

travaillé . Utiliser ce code

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

dans un fichier sous

    [Project Folder]/src/main/Java/com/abc/xyz/filename.Java

De plus, vous avez ce morceau de code dans hibernate.cfg.xml

<mapping resource="hibernate/Address.hbm.xml" />
<mapping resource="hibernate/Person.hbm.xml" />

Placez les fichiers hbm.xml ci-dessus sous:

MODIFIER:

[Project Folder]/src/main/resources/hibernate/Address.hbm.xml
[Project Folder]/src/main/resources/hibernate/Person.hbm.xml

Au-dessus de la structure a travaillé.

11
Kisanagaram

Vous pouvez placer le fichier "hibernate.cfg.xml" dans le dossier src (src\hibernate.cfg.xml), puis initialiser la configuration sous le code ci-dessous:

Configuration configuration = new Configuration();          
sessionFactory =configuration.configure().buildSessionFactory();
4
Ha Nguyen

Ceci est un exemple de réalité lorsque vous personnalisez la structure de dossiers: Structure de dossiers et initialisez la classe HibernateUtil

 enter image description here

avec:

return new Configuration().configure("/config/hibernate.cfg.xml").buildSessionFactory();

cartographie:  enter image description here


avec personnaliser les fichiers de mappage des entités:

        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>
        <mapping class="com.vy.entities.Users"/>
        <mapping class="com.vy.entities.Post"/>
        <mapping resource="config/Users.hbm.xml"/>      
        <mapping resource="config/Post.hbm.xml"/>               
    </session-factory>
</hibernate-configuration>

(Remarque: la manière la plus simple, si vous suivez la méthode par défaut, cela signifie de placer tous les fichiers de configuration xml dans le dossier src, lors de la construction de la sessionFactory, uniquement:

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

)

4
foobarfuu

essayez ci-dessous le code cela résoudra votre problème. 

Configuration  configuration = new Configuration().configure("/logic/hibernate.cfg.xml");
2
harsh agarwal

Mon problème était que j’avais un motif excessif dans le dossier des ressources .. 

config.configure(); 

a travaillé pour moi. Avec la structure Src/Java/... HibernateUtil.Java et le fichier cfg sous src/resources.

1
Zvonimir Lozancic

Une autre raison pour laquelle cette exception se produit est si vous appelez la méthode configure deux fois sur un objet Configuration ou AnnotatedConfiguration comme ceci 

AnnotationConfiguration config = new AnnotationConfiguration();
config.addAnnotatedClass(MyClass.class);
//Use this if config files are in src folder
config.configure();
//Use this if config files are in a subfolder of src, such as "resources"
config.configure("/resources/hibernate.cfg.xml");

En fait, cette structure de projet est à l'intérieur d'Eclipse. 

1
Borat Sagdiyev

Dans le cas d'un projet Maven, créez un dossier nommé resources dans le dossier src/main et ajoutez le dossier resources en tant que dossier source dans votre chemin de classe.

Vous pouvez le faire en allant dans Configurer le chemin de construction, puis en cliquant sur Ajouter un dossier à l'onglet Sources.

Ensuite, vérifiez le dossier des ressources et cliquez sur Appliquer.

Ensuite, utilisez simplement:

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
0
Manoj Majumdar

Utiliser la méthode configure () deux fois est responsable du problème pour moi. Au lieu d'utiliser comme ceci:

    Configuration configuration = new Configuration().configure();
    configuration.configure("/main/resources/hibernate.cfg.xml");

Maintenant, j'utilise comme ça, le problème n'existe plus.

    Configuration configuration = new Configuration();
    configuration.configure("/main/resources/hibernate.cfg.xml");

P.S: Mon fichier hibernate.cfg.xml se trouve également dans "src/main/resources/hibernate.cfg.xml". Le code ci-dessous fonctionne pour moi. à hibernate-5

public class HibernateUtil {

 private static SessionFactory sessionFactory ;


 static {
     try{
    Configuration configuration = new Configuration();
    configuration.configure("/main/resources/hibernate.cfg.xml");
    StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
    sessionFactory = configuration.buildSessionFactory(builder.build());
 }
     catch(Exception e){
         e.printStackTrace();
     }
     }

public static SessionFactory getSessionFactory() {
    return sessionFactory;
}
}  
0
ÖMER TAŞCI

Pour ceux que cela intéresse: si vous utilisez Intellij , il suffit de mettre hibernate.cfg.xml sous src/main/resources.

0
Quan VO