web-dev-qa-db-fra.com

hibernate.cfg.xml contient des informations sur la base de données MySQL. Pourquoi cette exception me concerne-t-elle?

C'est une question à propos de l'hibernation de Java.

mon hibernate.cfg.xml est

 <?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-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/poc</property>
    <property name="hibernate.connection.username">user</property>
    <property name="hibernate.connection.password"/>
    <mapping class="test.person" file="" jar="" package="" resource="person.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

La connexion à la base de données fonctionne et je peux explorer les bases de données et les tables,

mon échantillon

person.hbm.xml est

<?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-mapping>
    <class name="test.person" table="person">
        <id name="id" type="int" column="id" >
            <generator class="assigned"/>
        </id>
        <property name="fName">
            <column name="fName" />
        </property>
        <property name="lName">
            <column name="lName"/>
        </property>
        <property name="age">
            <column name="age"/>
        </property>
        <property name="gender">
            <column name="gender"/>
        </property>
    </class>
</hibernate-mapping>

c'est ma classe de personne

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package test;

public class person {

    private int id;
    private String fName;
    private String lName;
    private String gender;
    private int age;

    public person() {
        System.out.println("person");
    }

    public int getId() {
        return id;
    }

    public int getAge() {
        return age;
    }

    public String getfName() {
        return fName;
    }

    public String getGender() {
        return gender;
    }

    public String getlName() {
        return lName;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setfName(String fName) {
        this.fName = fName;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public void setlName(String lName) {
        this.lName = lName;
    }

}

Voici ma classe principale

package test;


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

public class Test {

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {


        Session session = null;
        SessionFactory sessionFactory =new Configuration().configure().buildSessionFactory();
        session = sessionFactory.openSession();

        person obj = new person();
        obj.setfName("Aqif");
        obj.setlName("Hamid");
        obj.setAge(24);
        obj.setGender("Male");

        session.save(obj);
        session.flush();
        session.close();

    }
}

Je reçois cette exception,

SEVERE: JDBC Driver class not found: org.Apache.derby.jdbc.ClientDriver
Java.lang.ClassNotFoundException: org.Apache.derby.jdbc.ClientDriver
    at Java.net.URLClassLoader$1.run(URLClassLoader.Java:202)
    at Java.security.AccessController.doPrivileged(Native Method)
    at Java.net.URLClassLoader.findClass(URLClassLoader.Java:190)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:306)
    at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:301)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:247)
    at Java.lang.Class.forName0(Native Method)
    at Java.lang.Class.forName(Class.Java:169)
    at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.Java:100)
    at org.hibernate.connection.DriverManagerConnectionProvider.configure(DriverManagerConnectionProvider.Java:61)
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.Java:124)
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.Java:56)
    at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.Java:414)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.Java:62)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.Java:2009)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.Java:1292)
    at test.Test.main(Test.Java:15)
Exception in thread "main" org.hibernate.HibernateException: JDBC Driver class not found: org.Apache.derby.jdbc.ClientDriver
    at org.hibernate.connection.DriverManagerConnectionProvider.configure(DriverManagerConnectionProvider.Java:66)
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.Java:124)
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.Java:56)
    at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.Java:414)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.Java:62)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.Java:2009)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.Java:1292)
    at test.Test.main(Test.Java:15)
Caused by: Java.lang.ClassNotFoundException: org.Apache.derby.jdbc.ClientDriver
    at Java.net.URLClassLoader$1.run(URLClassLoader.Java:202)
    at Java.security.AccessController.doPrivileged(Native Method)
    at Java.net.URLClassLoader.findClass(URLClassLoader.Java:190)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:306)
    at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:301)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:247)
    at Java.lang.Class.forName0(Native Method)
    at Java.lang.Class.forName(Class.Java:169)
    at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.Java:100)
    at org.hibernate.connection.DriverManagerConnectionProvider.configure(DriverManagerConnectionProvider.Java:61)
    ... 7 more
Java Result: 1

S'il vous plaît aidez-moi à résoudre ces exceptions

Je ne sais pas pourquoi je reçois cette exception

Java.lang.ClassNotFoundException: org.Apache.derby.jdbc.ClientDriver

Où mon hibernate.cfg.xml est défini pour la base de données MySQL


MODIFIER:

L'emplacement des fichiers,

Il se trouve à la racine des fichiers .Java

C: ..... NetBeansProjects\test\src

C'est le dossier src de mon projet.

et les fichiers Java sont en

C: ..... NetBeansProjects\test\src\test

J'ai essayé en copiant mon fichier hibernate.cfg.xml vers d'autres emplacements également.

7
Aqif Hamid

Le hibernate.cfg.xml doit être présent dans la racine du classpath. Hibernate utilise le chargeur de classes contextuel du thread actuel pour localiser et charger ce fichier. Cela voudrait dire que:

  • Si la classe Test se trouve dans un fichier JAR, le fichier de configuration doit se trouver à la racine du fichier JAR. 
  • Si la classe Test est dans un répertoire, dites /classes/test/Test.class, alors hibernate.cfg.xml doit figurer dans /classes.

Votre problème actuel serait probablement dû à la localisation et au chargement par Hibernate d'un autre fichier hibernate.cfg.xml. Cela est possible si aucun fichier de configuration n'a été trouvé à la racine de votre chemin de classe; Hibernate délègue ensuite le chargement du fichier de configuration au chargeur de classes de la classe Environment, jusqu'à ce qu'il localise un fichier de configuration. Pour éviter cela, vous devez vous assurer que le fichier de configuration souhaité, avec les propriétés associées à MySQL, doit être présent à la racine de votre chemin de classe.

9
Vineet Reynolds

Vous utilisez le mauvais hibernate.cfg.xml. Il devrait être situé dans votre src et non dans un package/sous-répertoire.

2
Vlad

Tout d'abord, changez le nom de votre classe dans le format correct de Java. Remplacez le nom de la classe "person" par "Person". Et changez maintenant la base de données par défaut d'eclips en la base de données requise auquel vous souhaitez vous connecter en suivant Didacticiel Hibernate 02 - Configuration d’Hibernate et Didacticiel Hibernate 03 - Partie 1 - Création d’une application Hibernate

Une fois le mécanisme de connexion terminé, veuillez vérifier votre connexion à la base de données à l’aide de l’option broche dans eclips ... Elle est maintenant prête à vous connecter à votre base de données avec Hibernate ...

1
Ramesh J

Placez hibernate.cfg.xml dans la racine du classpath et Définissez les fichiers jar dans le classpath Ensuite, cela fonctionnera.

1
Sushil Deshmukh

Sauf si vous avez configuré la fabrique de session en configuration, elle ne créera pas d'objet de session avec des informations de mappage et de base de données. Il suffit donc de créer la configuration en passant hibernate.cfg.xml

Configuration cfg = new Configuration();
cfg.configure("hibernate.cfg.xml");// populates the data         
                                    // configuration file

// creating seession factory object
SessionFactory factory = cfg.buildSessionFactory();

// creating session object
Session session = factory.openSession();
0
Ganesh shalivahana