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.
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:
Test
se trouve dans un fichier JAR, le fichier de configuration doit se trouver à la racine du fichier JAR. 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.
Vous utilisez le mauvais hibernate.cfg.xml
. Il devrait être situé dans votre src
et non dans un package/sous-répertoire.
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 ...
Placez hibernate.cfg.xml dans la racine du classpath et Définissez les fichiers jar dans le classpath Ensuite, cela fonctionnera.
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();