ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies
TP2(Hibernate)
1) Mise en place d’hibernate :
On utilise pur ce TP « [Link] », on commence donc à extraire le
fichier « [Link] » :
Maintenant nous allons créer sous éclipse un nouveau projet java qui va traiter nos objets métiers et
stocker leurs données relatives dans notre base de données.
1) Création du nouveau projet :
Lancer eclipse.
File->New->Project
Java->JavaProject
Puis « Next », l’assistant vous demandera le nom du projet : « PremierHibernate»
Cliquer sur « Finish ».
Vous verrez alors le nouveau projet au niveau du Package explorer (à gauche).
Clique droit sur le repertoir SRC du projet, puis New->package.
Nom du package : « [Link] »
1
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies
2) Mise en place d’une librairie utilisateur : Hibernate :
Window->Preferences, une fenêtre s’affiche:
Java->BuildPath-> User
Libraries puis appuiez sur
“New”.
Nom : Hibernate puis OK.
La nouvelle librairie
s’affiche.
Choisissez « Add Jars »
Parcourir le repertoire ou vous avez extrait hibernate jusqu'à trouver le fichier : [Link].
Puis «Load ». Idem pour les fichiers qui se trouve sous le repertoire « \lib\required »
Enfin « OK ».
2
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies
3) Relier le Projet à la librairie :
Choisir la racine du projet->properties->Java BuildPath
L’onglet « Libraries » puis « Add Library ».
Choisissez « User Library » puis, « Next »une liste des librairies s’affiche ,choisissez les
librairie Mysql (voir TP1) et hibernate, puis« Finish »
4) Création du fichier de configuration :
Cliquer sur le projet «PremierHibernate » puis clique droit new Source Folder
Nom du répertoire : META-INF puis ok.
Clique droit sur META-INF puis newotherXMLXML.
Nom du Fichier : [Link]
3
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies
Voici son contenu (On suppose que vous avez déjà créé une base de données qui se nomme
« hibernate » avec un utilisateur et un mot de passe (voir TP1)) :
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-
//Hibernate/Hibernate Configuration DTD 3.0//EN"
"[Link]
[Link]">
<hibernate-configuration>
<session-factory>
<property
name="[Link]">jdbc:mysql://localhost/hibernate</proper
ty>
<property name="[Link]">esprituser</property>
<property name="[Link]">espritpwd</property>
<property
name="connection.driver_class">[Link]</property
>
<property
name="dialect">[Link]</property>
<property name="[Link]">update</property>
<property
name="transaction.factory_class">[Link]
CTransactionFactory</property>
<!-- thread is the short name for
[Link]
and let Hibernate bind the session automatically to the
thread
-->
<property
name="current_session_context_class">thread</property>
<!-- this will show us all sql statements -->
<property name="hibernate.show_sql">true</property>
<!-- mapping files -->
</session-factory>
</hibernate-configuration>
4
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies
Maintenant creer un nouveau fichier qui se nomme « [Link] » :
Projet : clique droitnewotherGeneralfile
### direct log messages to stdout ###
[Link]=[Link]
[Link]=[Link]
[Link]=[Link]
[Link]=%d{ABSOLUTE} %5p %c{1}:%L -
%m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
[Link]=debug, stdout
[Link]=info
#[Link]=debug
### log HQL query parser activity
#[Link]=debug
### log just the SQL
[Link]=debug
### log JDBC bind parameters ###
[Link]=info
### log schema export/update ###
[Link].hbm2ddl=info
### log HQL parse trees
#[Link]=debug
### log cache activity ###
[Link]=info
### log transaction activity
#[Link]=debug
### log JDBC resource acquisition
#[Link]=debug
### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#[Link]=trac
e
5
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies
1) Les classes persistantes :
* 1 1 *
Enseignant Ecole Evénement
*
*
*
*
*
Fournisseur Etudiant
Actionnaire
-Ajouter les classes suivantes dans le sous package: « persistance » :
class Ecole
package [Link];
import [Link];
public class Ecole {
private int num;
private String nom;
private String address;
private int nombreSalles;
private List<Enseignant> enseignants;
private List<Etudiant> etudiants;
private List<Fournisseur> fournisseurs;
private List<Actionnaire> actionnaires;
public String getNom() {return nom;}
public void setNom(String nom) { [Link] = nom;}
public String getAdresse() {return address;}
public void setAdresse (String address) {[Link] =
address;}
public int getNombreSalles() {return nombreSalles;}
public void setNombreSalles(int nombreSalles)
{[Link] = nombreSalles;}
public void setNum(int num) {[Link] = num;}
6
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies
public int getNum() {return num;}
public String toString(){
return ("-------------------------------\n" +
"Nom: "+nom+"\n Adresse: "+address+
"\n Nombre de salles:"+nombreSalles);}
public void setEnseignants(List<Enseignant> enseignants) {
[Link] = enseignants;
}
public List<Enseignant> getEnseignants() {
return enseignants;
}
public void setEtudiants(List<Etudiant> etudiants) {
[Link] = etudiants;
}
public List<Etudiant> getEtudiants() {
return etudiants;
}
public void setFournisseurs(List<Fournisseur> fournisseurs) {
[Link] = fournisseurs;
}
public List<Fournisseur> getFournisseurs() {
return fournisseurs;
}
public void setActionnaires(List<Actionnaire> actionnaires) {
[Link] = actionnaires;
}
public List<Actionnaire> getActionnaires() {
return actionnaires;
}
}
package [Link];
import [Link];
public class Actionnaire {
private int id;
private String nom;
private List<Ecole> ecoles;
public int getId() { return id;}
public void setId(int id) {[Link] = id;}
public String getNom() {return nom;}
public void setNom(String nom) {[Link] = nom;}
public List<Ecole> getEcoles() {return ecoles;}
public void setEcoles(List<Ecole> ecoles) {[Link] =
ecoles;}
}
package [Link];
7
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies
public class Enseignant {
private String ncin;
private String nom;
public String getNcin() {
return ncin;
}
public void setNcin(String ncin) {
[Link] = ncin;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
[Link] = nom;
}
package [Link];
public class Etudiant {
private Ecole ecole;
private int id;
private String nom;
public void setEcole(Ecole ecole) {[Link] =
ecole;}
public Ecole getEcole() { return ecole;}
public void setId(int id) {[Link] = id;}
public int getId() {return id;}
public void setNom(String nom) {[Link] = nom;}
public String getNom() {return nom;}
8
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies
package [Link];
import [Link];
public class Evennement {
private Ecole ecole;
private int id;
private String titre;
private Date date;
public int getId() {return id;}
public void setId(int id) { [Link] = id;}
public String getTitre() { return titre;}
public void setTitre(String titre) {[Link] =
titre;}
public Date getDate() {return date;}
public void setDate(Date date) { [Link] = date;}
public void setEcole(Ecole ecole) { [Link] =
ecole;}
public Ecole getEcole() { return ecole;}
package [Link];
public class Fournisseur {
private String nom;
public void setNom(String nom) {[Link] = nom;}
public String getNom() {return nom;}
}
9
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies
Maintenant il faut rendre ces classes « mappé » c.a.d créer pour chaque classe un fichier
« --------.[Link] » :
[Link]:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"[Link]
<hibernate-mapping package
="[Link]">
<class name="Ecole" table="T_ECOLE">
<id name="num" type="int" column="Ecole_num">
<generator class="native"/>
</id>
<property name="nom" type="string" column="Ecole_nom"/>
<property name="adresse" type="string"
column="Ecole_adresse"/>
<property name="nombreSalles" type="int"
column="Ecole_nb_salles"/>
<bag name="enseignants" cascade="all">
<key column="FK_Ecole"/>
<one-to-many class="Enseignant" ></one-to-many>
</bag>
<bag name="etudiants" cascade="all">
<key column="FK_ECOLE"></key>
<one-to-many class="Etudiant"/>
</bag>
<bag name="fournisseurs" table="ECOLE_FOURNISSEUR"
cascade="all">
<key column="FK_ECOLE"></key>
<many-to-many column="FK_FOURNISSEUR"
class="Fournisseur"></many-to-many>
</bag>
<bag name="actionnaires" table="ECOLE_ACTIONNAIRE"
cascade="all">
<key column="FK_ECOLE"></key>
<many-to-many column="FK_ACTIONNAIRE"
class="Actionnaire"></many-to-many>
</bag>
</class></hibernate-mapping>
10
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies
[Link]:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"[Link]
<hibernate-mapping package
="[Link]">
<class name="Enseignant" table="T_Enseignant">
<id name="ncin" type="string" column="Ens_ncin">
</id>
<property name="nom" type="string" column="Ens_nom"/>
</class></hibernate-mapping>
[Link]:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"[Link]
<hibernate-mapping package
="[Link]">
<class name="Etudiant" table="T_Etudiant">
<id name="id" type="int" column="etd_id">
<generator class="increment"></generator>
</id>
<property name="nom" type="string" column="etd_nom"/>
<many-to-one name="ecole" column="FK_ECOLE"></many-to-one>
</class>
</hibernate-mapping>
[Link]:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
11
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies
"[Link]
<hibernate-mapping package="[Link]">
<class name="Evennement" table="T_Evennement">
<id name="id" type="int" column="Even_ID">
<generator class="native"/>
</id>
<property name="titre" type="string" column="EVEN_TITRE"/>
<property name="date" type="timestamp" column="EVEN_DATE"/>
<many-to-one name="ecole" column="FK_ECOLE"
cascade="all"></many-to-one>
</class>
</hibernate-mapping>
[Link]:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"[Link]
<hibernate-mapping package
="[Link]">
<class name="Fournisseur" table="T_Fournisseur">
<id name="nom" type="string" column="FRN_NOM">
</id>
</class>
</hibernate-mapping>
12
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies
[Link]:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"[Link]
<hibernate-mapping package
="[Link]">
<class name="Actionnaire" table="T_ACTIONNAIRE">
<id name="id" type="int" column="ACT_ID">
<generator class="native"/>
</id>
<property name="nom" type="string" column="ACT_NOM"/>
<bag name="ecoles" table="ECOLE_ACTIONNAIRE" inverse="false"
cascade="all">
<key column="FK_ACTIONNAIRE"></key>
<many-to-many column="FK_ECOLE" class="Ecole"></many-to-many>
</bag>
</class>
</hibernate-mapping>
Maintenant il faut ajouter ceci à [Link] pour rendre les classes mappés :
<mapping
resource="com/esprit/hibernate/persistance/[Link]"/>
<mapping
resource="com/esprit/hibernate/persistance/[Link]"
/>
<mapping
resource="com/esprit/hibernate/persistance/[Link]"
/>
<mapping
resource="com/esprit/hibernate/persistance/[Link]"/>
<mapping
resource="com/esprit/hibernate/persistance/[Link]
"/>
<mapping
resource="com/esprit/hibernate/persistance/[Link]
"/
13
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies
Manipulation et test :
1) Créer un package « [Link] »
Voici une classe qui test la création du shéma.
package [Link];
import [Link];
import [Link];
public class DdlTest {
public static void main(String[] args) {
SessionFactory sf=new Configuration().configure()
.buildSessionFactory();
}
}
Voici une classe qui teste l’ajout d’une nouvelle école (avec un fournisseur) :
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class EcoleFournisseurInsertionTest {
public static void main(String[] args) {
SessionFactory sf=new Configuration().configure()
.buildSessionFactory();
Session session=[Link]();
[Link]();
Transaction tx=[Link]();
14
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies
Ecole ec=new Ecole();
[Link]("ESPRIT");
[Link](35);
Fournisseur fr1=new Fournisseur();
[Link]("ALLANI");
[Link](new ArrayList<Fournisseur>());
[Link]().add(fr1);
[Link](ec);
[Link]();
[Link]();
}
}
Cette classe liste les écoles a partir d’un fournisseur :
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class EcoleListingFromFournisseurTest {
/**
* @param args
*/
public static void main(String[] args) {
SessionFactory sf=new Configuration().configure()
.buildSessionFactory();
15
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies
Session session=[Link]();
[Link]();
Transaction tx=[Link]();
Ecole e1;
e1=(Ecole)[Link]([Link],1 );
Actionnaire
act1=(Actionnaire)[Link]([Link],1 );
for (Ecole e:[Link]()){
[Link]().warn([Link]());
[Link]().warn("____________________");
}
[Link]();
}
}
Insertion d’un eseignant Avec une ecole existante:
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class InsertionEnseignantAecoleExistante {
/**
* @param args
*/
public static void main(String[] args) {
//[Link](args);
SessionFactory sf=new Configuration().configure()
.buildSessionFactory();
Session session=[Link]();
16
TP 2- Hibernate (Architectures n-tiers JEE)
ESPRIT -Ecole Supérieure privée d’ingénierie et de technologies
[Link]();
Transaction tx=[Link]();
Ecole e=(Ecole) [Link]([Link], 1);
Enseignant ens1=new Enseignant();
[Link]("00987");
[Link]("Foulen1");
Enseignant ens2=new Enseignant();
[Link]("005678");
[Link]("Foulen2");
[Link]().add(ens1);
[Link]().add(ens2);
[Link](e);
[Link]();
17
TP 2- Hibernate (Architectures n-tiers JEE)