web-dev-qa-db-fra.com

org.hibernate.internal.util.config.ConfigurationException: impossible de localiser la ressource cfg.xml [/HibernateTest/src/hibernate.cfg.xml]

J'essaie de me connecter à Postgresql9.1 sous Ubuntu avec pgadmin3 . Mon outil d'interface graphique Pgadmin3 ne permet pas de créer des tableaux en faisant un clic droit sur la base de données, mais il est disponible dans certaines vidéos que j'ai vues. Par conséquent, j'ai utilisé terminal pour créer la base de données et cela s'est présenté dans pgadmin3.

ma structure de fichier

Mon fichier Userdetails

package org.nitish.hiber;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class UserDetails {
    @Id
    private int userId;
    private String userName;
    public int getUserId() {
        return userId;
    }
    public void setUserId(int userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
}

Mon fichier HibernateCaller

package org.nitish.caller;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.nitish.hiber.UserDetails;

public class HibernateTest {

    public static void main(String[] args) {
        UserDetails user = new UserDetails();
        user.setUserId(1);
        user.setUserName("First User");
        try {
            SessionFactory sessionFactory = new Configuration().configure("/HibernateTest/src/hibernate.cfg.xml").buildSessionFactory();
            Session session = sessionFactory.openSession();
            session.beginTransaction();
            session.save(user);
            session.getTransaction().commit();

        } catch(HibernateException e) {
            e.printStackTrace();
        }
    }

}

Hibernate.cfg.xml

    <?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, Relational Persistence for Idiomatic Java
  ~
  ~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.
  ~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
  -->
<hibernate-configuration>

  <session-factory>
    <!-- Database connection settings -->
    <property name="connection.driver_class">org.postgresql.Driver  </property>
    <property name="connection.url">jdbc:postgresql://localhost:5432/hiber</property>
    <property name="connection.username">nitish</property>
    <property name="connection.password"></property>

    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>

    <!-- SQL dialect -->
    <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</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.internal.NoCacheProvider</property>

    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">true</property>

    <!-- Drop and re-create the database schema on startup -->
    <property name="hbm2ddl.auto">create</property>

    <mapping class="org.nitish.hiber.UserDetails"/>
  </session-factory>
</hibernate-configuration>

Je reçois l'erreur suivante

Mar 1, 2016 9:02:48 AM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Mar 1, 2016 9:02:48 AM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
org.hibernate.internal.util.config.ConfigurationException: Could not locate cfg.xml resource [/HibernateTest/src/hibernate.cfg.xml]
    at org.hibernate.boot.cfgxml.internal.ConfigLoader.loadConfigXmlResource(ConfigLoader.Java:53)
    at org.hibernate.boot.registry.StandardServiceRegistryBuilder.configure(StandardServiceRegistryBuilder.Java:163)
    at org.hibernate.cfg.Configuration.configure(Configuration.Java:259)
    at org.nitish.caller.HibernateTest.main(HibernateTest.Java:17)

Après avoir apporté peu de modifications (je ne pouvais pas utiliser session.close () dans block finalement, je pense que cela ne devrait pas causer cette erreur)

Mar 1, 2016 10:13:34 AM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.1.0.Final}
Mar 1, 2016 10:13:34 AM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Mar 1, 2016 10:13:34 AM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Mar 1, 2016 10:13:34 AM org.hibernate.boot.jaxb.internal.stax.LocalXmlResourceResolver resolveEntity
WARN: HHH90000012: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/hibernate-configuration. Use namespace http://www.hibernate.org/dtd/hibernate-configuration instead.  Support for obsolete DTD/XSD namespaces may be removed at any time.
Mar 1, 2016 10:13:35 AM org.hibernate.annotations.common.reflection.Java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
Mar 1, 2016 10:13:35 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.Java:244)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.Java:208)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.Java:189)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.Java:51)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.Java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.Java:217)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.Java:189)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.Java:352)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.Java:111)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.Java:83)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.Java:418)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.Java:87)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.Java:692)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.Java:724)
    at org.nitish.caller.HibernateTest.main(HibernateTest.Java:17)
Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [org.postgresql.Driver]
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.Java:229)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.loadDriverIfPossible(DriverManagerConnectionProviderImpl.Java:161)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildCreator(DriverManagerConnectionProviderImpl.Java:117)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.Java:73)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.Java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.Java:217)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.Java:189)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.Java:145)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.Java:66)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.Java:35)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.Java:88)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.Java:234)
    ... 14 more
Caused by: Java.lang.ClassNotFoundException: Could not load requested class : org.postgresql.Driver
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl$AggregatedClassLoader.findClass(ClassLoaderServiceImpl.Java:217)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:323)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:268)
    at Java.lang.Class.forName0(Native Method)
    at Java.lang.Class.forName(Class.Java:274)
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.Java:226)
    ... 25 more
7
nitishpisal

Si vous avez votre hibernate.cfg.xml à la racine du dossier source, faites simplement 

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

S'il se trouve dans le package, pour un exemple dans org.nitish.caller, indiquez le chemin de cette manière.

 SessionFactory sessionFactory = new Configuration()
    .configure("/org/nitish/caller/hibernate.cfg.xml").buildSessionFactory();

Vous devez fermer la session (dans le bloc finally). N'oubliez pas d'ajouter le code rollback.

S'il vous plaît, ajoutez l'annotation @Table à la UserDetails.

Mettre à jour

La raison de l'erreur est que Hibernate ne trouve pas la classe org.postgresql.Driver. Il réside dans le pot postgresql. Vous avez ce fichier jar à votre image, mais peut-être que vous ne l'ajoutez pas au classpath. Référence Comment ajouter des fichiers JAR aux chemins de construction du projet dans Eclipse (Java) .

Pour fermer une session dans le bloc finally, vous devez avoir la variable session en dehors du bloc try.

    Session session = sessionFactory.openSession();

    try{

    } finally {
        session.close();
   }
8
v.ladynev

J'ai résolu ce problème en déplaçant mon fichier de configuration vers src/mail/resources. Pour moi, c'était le répertoire racine.

1
ASH

new Configuration().configure() prend hibernate.cfg.xml à la racine du répertoire du chemin de la classe. new Configuration().configure("/com/company/project/hibernate.cfg.xml") extrait de la racine du chemin de classe + com/société/projet/hibernate.cfg.xml

Si vous utilisez un nom de fichier différent pour la configuration de mise en veille prolongée à partir de la racine du chemin de classe, alors: new Configuration().configure("/database.cfg.xml")

Si vous voulez donner le chemin d'accès complet au fichier de configuration, alors new Configuration().configure(new File("/home/visruth/config/hibernate.cfg.xml)) qui extrait le fichier de configuration de l'emplacement exact indiqué.

1
Visruth

Toutes les réponses précédentes sont parfaites. Cependant, si vous avez besoin d’une solution très rapide, je vous recommande de simplement mettre votre fichier hibernate.cfg.xml dans votre dossier source et d’écrire. 

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

C'est simple et ça marche!

0
Parth Mehta
new Configuration().configure(new File("hibernate.cfg.xml")).buildSessionFactory());

Cela a résolu l'erreur pour moi!

0
Mohamed Anees A