Problème avec hibernate+MySQL
Résolu/Fermé
sofien007
Messages postés
26
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
25 novembre 2008
-
15 août 2008 à 12:41
khalil - 11 déc. 2008 à 23:00
khalil - 11 déc. 2008 à 23:00
A voir également:
- Problème avec hibernate+MySQL
- Mysql community server - Télécharger - Bases de données
- Mysql error 1 ✓ - Forum Réseaux sociaux
- Phpmyadmin a tenté de se connecter au serveur mysql, et le serveur a rejeté la connexion. merci de vérifier les valeurs de host, username et password dans la configuration et de s'assurer qu'elles correspondent aux informations fournies par l'administrateur du serveur mysql. ✓ - Forum PHP
- Mysql fatal error ✓ - Forum MySQL
- Le serveur mysql est inaccessible. vérifiez votre configuration. ✓ - Forum MySQL
4 réponses
hafidodido
Messages postés
40
Date d'inscription
vendredi 15 août 2008
Statut
Membre
Dernière intervention
11 octobre 2008
10
Modifié par 00lina00 le 24/07/2010 à 00:33
Modifié par 00lina00 le 24/07/2010 à 00:33
slt sofien007
je vais vous détailler la démarche de travail avec hibernate
Hibernate a besoin de plusieurs éléments pour fonctionner :
* une classe de type javabean qui encapsule les données d'une occurence d'une table
* un fichier de correspondance qui configure la correspondance entre la classe et la table
* des propriétés de configuration notamment des informations concernant la connexion à la base de données
Une fois ces éléments correctement définis, il est possible d'utiliser Hibernate dans le code des traitements à réaliser.
Donc les étapes sont les suivantes:
1. La création d'une classe qui va encapsuler les données(javabean)
2. La création d'un fichier de correspondance ou de mapping
Pour assurer le mapping, Hibernate a besoin d'un fichier de correspondance (mapping file) au format XML qui va contenir des informations sur la correspondance entre la classe définie et la table de la base de données.
Même si cela est possible, il n'est pas recommandé de définir un fichier de mapping pour plusieurs classes. Le plus simple est de définir un fichier de mapping par classe, nommé du nom de la classe suivi par ".hbm.xml". Ce fichier doit être situé dans le même répertoire que la classe correspondante ou dans la même archive pour les applications packagées.
Différents éléments sont précisés dans ce document XML :
* la classe qui va encapsuler les données
* l'identifiant dans la base de données et son mode de génération
* le mapping entre les propriétés de classe et les champs de la base de données
* les relations
* ...
pour moi j'ai utilisé un fichier de mapping par table(Factures.hbm.xml---->la table factures) pour bien séparer les choses.
exemple d'un fichier de mapping que j'ai déja utilisé: "Factures.hbm.xml"
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Factures" table="Factures">
<id name="NumAvisIncident" type="int" column="NumAvisIncident">
<generator class="assigned"/>
</id>
<property name="NumFacture" type="int" not-null="true" />
<property name="ConsommationEstime" type="string" not-null="true" />
<property name="CodeTarif" type="int" not-null="true" />
<property name="PrixUnitaire" type="string" not-null="true" />
<property name="Timbre" type="string" not-null="true" />
<property name="GenrePaie" type="string" not-null="false" />
<property name="MontantPaye" type="string" not-null="false"/>
<property name="MontantConsommation" type="string" not-null="true" />
<property name="NetPayer" type="string" not-null="true" />
<property name="DontTva" type="string" not-null="true">
</property>
</class>
</hibernate-mapping>
3. La création d'un fichier de correspondance ou bien pour la configuration
Pour exécuter Hibernate, il faut lui fournir un certain nombre de propriétés concernant sa configuration pour qu'il puisse se connecter à la base de données.
Ces propriétés peuvent être fournies sous plusieurs formes :
* un fichier de configuration nommé hibernate.properties et stocké dans un répertoire inclus dans le classpath
* un fichier de configuration au format XML nommé hibernate.cfg.xml
* utiliser la méthode setProperties() de la classe Configuration
* définir des propriétés dans la JVM en utilisant l'option -Dpropriété=valeur
exemple d'un fichier de configuration que j'ai déja utilisé:ce fichier est nommé "hibernate.cfg.xml"
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/nomdemabasededonnée</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<property name="connection.pool_size">1</property>
<property name="current_session_context_class">thread</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="show_sql">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="Factures.hbm.xml"/>
<mapping resource="Labo.hbm.xml"/>
<mapping resource="Tarifs.hbm.xml"/>
<mapping resource="Communes.hbm.xml"/>
<mapping resource="Users.hbm.xml"/>
</session-factory>
</hibernate-configuration>
4. L'utilisation d'Hibernate
Pour utiliser Hibernate dans le code, il est nécessaire de réaliser plusieurs opérations :
* création d'une instance de la classe
* création d'une instance de la classe SessionFactory
* création d'une instance de la classe Session qui va permettre d'utiliser les services d'Hibernate
Si les propriétés sont définies dans le fichier hibernate.properties, il faut tout d'abord créer une instance de la classe Configuration. Pour lui associer la ou les classes encapsulant les données, la classe propose deux méthodes :
* addFile() qui attend en paramètre le nom du fichier de mapping
* addClass() qui attend en paramètre un objet de type Class encapsulant la classe. Dans ce cas, la méthode va rechercher un fichier nommé nom_de_la_classe.hbm.xml dans le classpath (ce fichier doit se situe dans le même répertoire que le fichier .class de la classe correspondante)
Une instance de la classe Session est obtenu à partir d'une fabrique de type SessionFactory. Cet objet est obtenu à partir de l'instance du type Configuration en utilisant la méthode buildSessionFactory().
La méthode openSession() de la classe SessionFactory permet d'obtenir une instance de la classe Session.
Par défaut, la méthode openSession() qui va ouvrir une connexion vers la base de données en utilisant les informations fournies par les propriétés de configuration.
Exemple :
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.Configuration;
import java.util.Date;
public class TestHibernate1 {
public static void main(String args[]) throws Exception {
Configuration config = new Configuration();
config.addClass(Personnes.class);
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
...
Il est aussi possible de fournir en paramètre de la méthode openSession() une instance de la classe javax.sql.Connection qui encapsule la connexion à la base de données.
Pour une utilisation du fichier hibernate.cfg.xml, il faut créer une occurrence de la classe Configuration, appeler sa méthode configure() qui va lire le fichier XML et appeler la méthode buildSessionFactory() de l'objet renvoyer par la méthode configure().
Exemple :
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.Configuration;
import java.util.*;
public class TestHibernate1 {
public static void main(String args[]) throws Exception {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
...
Il est important de clôturer l'objet Session, une fois que celui est devenu inutile, en utilisant la méthode close().
5.Exemple d'utilisation de hibernate dans le code "La persistance d'une nouvelle occurence"
Pour créer une nouvelle occurrence dans la source de données, il suffit de créer une nouvelle instance de classe encapsulant les données, de valoriser ces propriétés et d'appeler la méthode save() de la session en lui passant en paramètre l'objet encapsulant les données.
La méthode save() n'a aucune action directe sur la base de données. Pour enregistrer les données dans la base, il faut réaliser un commit sur la connexion ou la transaction ou faire appel à la méthode flush() de la classe Session.
Exemple :
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.Configuration;
import java.util.Date;
public class TestHibernate1 {
public static void main(String args[]) throws Exception {
Configuration config = new Configuration();
config.addClass(Personnes.class);
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Personnes personne = new Personnes("nom3", "prenom3", new Date());
session.save(personne);
session.flush() ;
tx.commit();
} catch (Exception e) {
if (tx != null) {
tx.rollback();
}
throw e;
} finally {
session.close();
}
sessionFactory.close();
}
}
je souhaite que ça vous aide et bonne chance.
je vais vous détailler la démarche de travail avec hibernate
Hibernate a besoin de plusieurs éléments pour fonctionner :
* une classe de type javabean qui encapsule les données d'une occurence d'une table
* un fichier de correspondance qui configure la correspondance entre la classe et la table
* des propriétés de configuration notamment des informations concernant la connexion à la base de données
Une fois ces éléments correctement définis, il est possible d'utiliser Hibernate dans le code des traitements à réaliser.
Donc les étapes sont les suivantes:
1. La création d'une classe qui va encapsuler les données(javabean)
2. La création d'un fichier de correspondance ou de mapping
Pour assurer le mapping, Hibernate a besoin d'un fichier de correspondance (mapping file) au format XML qui va contenir des informations sur la correspondance entre la classe définie et la table de la base de données.
Même si cela est possible, il n'est pas recommandé de définir un fichier de mapping pour plusieurs classes. Le plus simple est de définir un fichier de mapping par classe, nommé du nom de la classe suivi par ".hbm.xml". Ce fichier doit être situé dans le même répertoire que la classe correspondante ou dans la même archive pour les applications packagées.
Différents éléments sont précisés dans ce document XML :
* la classe qui va encapsuler les données
* l'identifiant dans la base de données et son mode de génération
* le mapping entre les propriétés de classe et les champs de la base de données
* les relations
* ...
pour moi j'ai utilisé un fichier de mapping par table(Factures.hbm.xml---->la table factures) pour bien séparer les choses.
exemple d'un fichier de mapping que j'ai déja utilisé: "Factures.hbm.xml"
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Factures" table="Factures">
<id name="NumAvisIncident" type="int" column="NumAvisIncident">
<generator class="assigned"/>
</id>
<property name="NumFacture" type="int" not-null="true" />
<property name="ConsommationEstime" type="string" not-null="true" />
<property name="CodeTarif" type="int" not-null="true" />
<property name="PrixUnitaire" type="string" not-null="true" />
<property name="Timbre" type="string" not-null="true" />
<property name="GenrePaie" type="string" not-null="false" />
<property name="MontantPaye" type="string" not-null="false"/>
<property name="MontantConsommation" type="string" not-null="true" />
<property name="NetPayer" type="string" not-null="true" />
<property name="DontTva" type="string" not-null="true">
</property>
</class>
</hibernate-mapping>
3. La création d'un fichier de correspondance ou bien pour la configuration
Pour exécuter Hibernate, il faut lui fournir un certain nombre de propriétés concernant sa configuration pour qu'il puisse se connecter à la base de données.
Ces propriétés peuvent être fournies sous plusieurs formes :
* un fichier de configuration nommé hibernate.properties et stocké dans un répertoire inclus dans le classpath
* un fichier de configuration au format XML nommé hibernate.cfg.xml
* utiliser la méthode setProperties() de la classe Configuration
* définir des propriétés dans la JVM en utilisant l'option -Dpropriété=valeur
exemple d'un fichier de configuration que j'ai déja utilisé:ce fichier est nommé "hibernate.cfg.xml"
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/nomdemabasededonnée</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<property name="connection.pool_size">1</property>
<property name="current_session_context_class">thread</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="show_sql">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="Factures.hbm.xml"/>
<mapping resource="Labo.hbm.xml"/>
<mapping resource="Tarifs.hbm.xml"/>
<mapping resource="Communes.hbm.xml"/>
<mapping resource="Users.hbm.xml"/>
</session-factory>
</hibernate-configuration>
4. L'utilisation d'Hibernate
Pour utiliser Hibernate dans le code, il est nécessaire de réaliser plusieurs opérations :
* création d'une instance de la classe
* création d'une instance de la classe SessionFactory
* création d'une instance de la classe Session qui va permettre d'utiliser les services d'Hibernate
Si les propriétés sont définies dans le fichier hibernate.properties, il faut tout d'abord créer une instance de la classe Configuration. Pour lui associer la ou les classes encapsulant les données, la classe propose deux méthodes :
* addFile() qui attend en paramètre le nom du fichier de mapping
* addClass() qui attend en paramètre un objet de type Class encapsulant la classe. Dans ce cas, la méthode va rechercher un fichier nommé nom_de_la_classe.hbm.xml dans le classpath (ce fichier doit se situe dans le même répertoire que le fichier .class de la classe correspondante)
Une instance de la classe Session est obtenu à partir d'une fabrique de type SessionFactory. Cet objet est obtenu à partir de l'instance du type Configuration en utilisant la méthode buildSessionFactory().
La méthode openSession() de la classe SessionFactory permet d'obtenir une instance de la classe Session.
Par défaut, la méthode openSession() qui va ouvrir une connexion vers la base de données en utilisant les informations fournies par les propriétés de configuration.
Exemple :
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.Configuration;
import java.util.Date;
public class TestHibernate1 {
public static void main(String args[]) throws Exception {
Configuration config = new Configuration();
config.addClass(Personnes.class);
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
...
Il est aussi possible de fournir en paramètre de la méthode openSession() une instance de la classe javax.sql.Connection qui encapsule la connexion à la base de données.
Pour une utilisation du fichier hibernate.cfg.xml, il faut créer une occurrence de la classe Configuration, appeler sa méthode configure() qui va lire le fichier XML et appeler la méthode buildSessionFactory() de l'objet renvoyer par la méthode configure().
Exemple :
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.Configuration;
import java.util.*;
public class TestHibernate1 {
public static void main(String args[]) throws Exception {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
...
Il est important de clôturer l'objet Session, une fois que celui est devenu inutile, en utilisant la méthode close().
5.Exemple d'utilisation de hibernate dans le code "La persistance d'une nouvelle occurence"
Pour créer une nouvelle occurrence dans la source de données, il suffit de créer une nouvelle instance de classe encapsulant les données, de valoriser ces propriétés et d'appeler la méthode save() de la session en lui passant en paramètre l'objet encapsulant les données.
La méthode save() n'a aucune action directe sur la base de données. Pour enregistrer les données dans la base, il faut réaliser un commit sur la connexion ou la transaction ou faire appel à la méthode flush() de la classe Session.
Exemple :
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.Configuration;
import java.util.Date;
public class TestHibernate1 {
public static void main(String args[]) throws Exception {
Configuration config = new Configuration();
config.addClass(Personnes.class);
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Personnes personne = new Personnes("nom3", "prenom3", new Date());
session.save(personne);
session.flush() ;
tx.commit();
} catch (Exception e) {
if (tx != null) {
tx.rollback();
}
throw e;
} finally {
session.close();
}
sessionFactory.close();
}
}
je souhaite que ça vous aide et bonne chance.
hafidodido
Messages postés
40
Date d'inscription
vendredi 15 août 2008
Statut
Membre
Dernière intervention
11 octobre 2008
10
Modifié par 00lina00 le 24/07/2010 à 00:33
Modifié par 00lina00 le 24/07/2010 à 00:33
slt
vous pouvez expliquer sur quelle étape vous avez des problemes.
vous pouvez expliquer sur quelle étape vous avez des problemes.
sofien007
Messages postés
26
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
25 novembre 2008
16 août 2008 à 10:30
16 août 2008 à 10:30
Bonjour, mon problème est dans java.sql.SQLException: Connections could not be acquired from the underlying database! qui engendra les exceptions suivantes...
Comment résoudre ca :(?
Comment résoudre ca :(?
Bonjour Abdelhafid,
nous utilisons jotm et jndi afin de gérer les pools de connexions hors objectweb a arrété de develloper leur produit depuis 2003. Par le fait meme nous nous sommes tournés vers atomikos cependant nous avions rencontré des problémes par exemple nous faisions un select à l'aide d'atomikos or celui-ci ne retournait 0 ligne malgre qu'il existait des enregistrements pour ce select.
Est ce que vous pourriez nous suggerer des outils qui peuvent remplacer jndi et jotm toujours dans lle open source.
Merci pour votre reponse
Khalil
nous utilisons jotm et jndi afin de gérer les pools de connexions hors objectweb a arrété de develloper leur produit depuis 2003. Par le fait meme nous nous sommes tournés vers atomikos cependant nous avions rencontré des problémes par exemple nous faisions un select à l'aide d'atomikos or celui-ci ne retournait 0 ligne malgre qu'il existait des enregistrements pour ce select.
Est ce que vous pourriez nous suggerer des outils qui peuvent remplacer jndi et jotm toujours dans lle open source.
Merci pour votre reponse
Khalil