Vous êtes sur la page 1sur 15

Crer son modle de donnes partir des entits Hibernate

(avec l'aide JPA pour les annotations) version 1.00 du 30/10/2009

Crer son modle de donnes partir des entits Hibernate ......... 1 Auteur : ..................................................................................... 1 Objectif :....................................................................................... 1 Pr-requis : ................................................................................... 1 Introduction................................................................................... 1 1-crer la base de donnes .............................................................. 2 2-crer le projet ............................................................................. 2 3-rfrencer les librairies utiles ........................................................ 2 4-on commence bosser : cration des pojos .................................... 3 5- prparation des POJOS la persistance & relation OneToOne ........... 6 6-Cration de la configuration Hibernate ............................................ 9 7-Maintenant un peu de code Hibernate ... mais juste un peu ............. 12

Auteur : Philippe Charrire : ph.charriere@gmail.com Socit : Astek Lyon Fonction : Responsable avant-ventes & veille technologique Niveau Java (le mien) : newbie

Objectif :
1. Jouer avec Hibernate & JPA sans rien y connatre ... Et dcouvrir que NetBeans est le meilleur IDE Java du monde (si !) 2. Crer une base de donnes relationnelle partir d'un modle objet sans taper une commande SQL

Pr-requis :
NetBeans 6.7.1 Java 6 (doit fonctionner avec Java 5) savoir faire une classe java ... ;-)

Introduction
Nous allons crer des entits "mtier" (en gros on va faire un modle objet) et gnrer la base de donnes relationnelle automatiquement partir de ce modle. Du coup : aucun besoin de connatre le SQL (yesss !!!)

1-crer la base de donnes


... juste la base, pas les tables. Il n'y aura pas un gramme de SQL dans ce tuto. Dans un 1er temps, il faut crer une base de donnes (onglet "Services" dans NetBeans + Click droit sur Java DB) Puis dmarrer la base

2-crer le projet
1. crer un projet de type "Java Application" 2. lui donner un nom : JAppHibernate_01 (par exemple)

3-rfrencer les librairies utiles


Dans l'onglet "Projets", vous remarquez une branche "Libraries" dans l'arborescence de votre projet :

1. 2. 3. 4.

Faire un click droit sur cette branche et slectionner le menu "Add Library" Slectionner "Hibernate" puis "Persistence" Clicker sur le bouton "Add Library" Re faire un click droit sur la branche "Libraries" et slectionner cette fois ci le menu "Add JAR/Folder" 5. il faut ajouter derbyclient.jar (sous windows il devrait tre dans Program Files/ Sun/JavaDB/lib)

4-on commence bosser : cration des pojos


dans le projet crer un nouveau package qui va contenir vos objets du domaines : com.chezwouam.pojos (par exemple) dans ce rpertoire crer dans un 1er temps une nouvelle classe Client avec le code ci-dessous : package com.chezwouam.pojos; public class Client { private Long id; private String nom; private String prenom; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getNom() { return nom; }

public void setNom(String nom) { this.nom = nom; } public String getPrenom() { return prenom; } public void setPrenom(String prenom) { this.prenom = prenom; } public Client(String nom, String prenom) { this.nom = nom; this.prenom = prenom; } public Client() { } } Ensuite crer une classe Voiture : package com.chezwouam.pojos; public class Voiture { private private private private Long id; String immatriculation; String marque; String modele;

public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getImmatriculation() { return immatriculation; } public void setImmatriculation(String immatriculation) { this.immatriculation = immatriculation; } public String getMarque() { return marque;

} public void setMarque(String marque) { this.marque = marque; } public String getModele() { return modele; } public void setModele(String modele) { this.modele = modele; } public Voiture(String immatriculation, String marque, String modele) { this.immatriculation = immatriculation; this.marque = marque; this.modele = modele; } public Voiture() { } } on va dire que le client a une seule voiture donc on modifie la classe Client de la faon suivante : package com.chezwouam.pojos; public class Client { private Long id; private String nom; private String prenom; private Voiture automobile; public Voiture getAutomobile() { return automobile; } public void setAutomobile(Voiture automobile) { this.automobile = automobile; }

public Long getId() { return id; }

public void setId(Long id) { this.id = id; } public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; } public String getPrenom() { return prenom; } public void setPrenom(String prenom) { this.prenom = prenom; } public Client(String nom, String prenom) { this.nom = nom; this.prenom = prenom; } public Client() { } }

5- prparation des POJOS la persistance & relation OneToOne


Nous allons faire a par le biais d'annotations : pour chaque classe on va utiliser @Entity pour chaque Id on va utiliser @Id (permettra d'identifier l'objet en base de donnes) et @GeneratedValue(strategy=GenerationType.AUTO) qui permet d'incrmenter automatiquement les Id pour la relation Un-Un de Client->Voiture, nous utiliserons @OneToOne L'utilisation des annotations avec Hibernate en lieu et place des mappings XML n'est possible qu'avec JPA Ce qui nous donne donc les classes Client & Voiture modifies de la manire suivante : package com.chezwouam.pojos; import import import import import java.io.Serializable; javax.persistence.Entity; javax.persistence.GeneratedValue; javax.persistence.GenerationType; javax.persistence.Id;

import javax.persistence.OneToOne; @Entity public class Client implements Serializable { private Long id; private String nom; private String prenom; private Voiture automobile; @OneToOne public Voiture getAutomobile() { return automobile; } public void setAutomobile(Voiture automobile) { this.automobile = automobile; }

@Id @GeneratedValue(strategy=GenerationType.AUTO) public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; } public String getPrenom() { return prenom; } public void setPrenom(String prenom) { this.prenom = prenom; } public Client(String nom, String prenom) { this.nom = nom; this.prenom = prenom; }

public Client() { } } package com.chezwouam.pojos; import import import import import java.io.Serializable; javax.persistence.Entity; javax.persistence.GeneratedValue; javax.persistence.GenerationType; javax.persistence.Id;

@Entity public class Voiture implements Serializable { private private private private Long id; String immatriculation; String marque; String modele;

@Id @GeneratedValue(strategy=GenerationType.AUTO) public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getImmatriculation() { return immatriculation; } public void setImmatriculation(String immatriculation) { this.immatriculation = immatriculation; } public String getMarque() { return marque; } public void setMarque(String marque) { this.marque = marque; } public String getModele() { return modele; } public void setModele(String modele) { this.modele = modele;

} public Voiture(String immatriculation, String marque, String modele) { this.immatriculation = immatriculation; this.marque = marque; this.modele = modele; } public Voiture() { } }

6-Cration de la configuration Hibernate


Nous allons maintenant crer le fichier de configuration Hibernate : Click droit sur la branche du projet, choisir "New File"+"Other ..." Slectionner la branche Hibernate et choisir "Hibernate Configuration Wizard"

Clicker sur "Finish". Nous arrivons sur cet cran :

Clicker sur "XML" pour sortir du mode "Design" : Le fichier XML de configuration devrait avoir le contenu suivant :

<?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.DerbyDialect</property> <property name="hibernate.connection.driver_class">org.apache.derby.jdbc.ClientDriver</proper <property name="hibernate.connection.url">jdbc:derby://localhost:1527/ MaBase</property> <property name="hibernate.connection.username">bob</property> <property name="hibernate.connection.password">bob</property> </session-factory> </hibernate-configuration> Il faudra ajouter ceci : <property name="hibernate.hbm2ddl.auto">create-drop</property> <property name="hibernate.current_session_context_class">thread</property> <mapping class="com.chezwouam.pojos.Client"/> <mapping class="com.chezwouam.pojos.Voiture"/> Nous devrions donc obtenir ceci : <?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.DerbyDialect</property <property name="hibernate.connection.driver_class">org.apache.derby.jdbc.Client <property name="hibernate.connection.url">jdbc:derby://localhost:1527/ MaBase</property> <property name="hibernate.connection.username">bob</property> <property name="hibernate.connection.password">bob</property> <property name="hibernate.hbm2ddl.auto">create-drop</property> <property name="hibernate.current_session_context_class">thread</property> <mapping class="com.chezwouam.pojos.Client"/> <mapping class="com.chezwouam.pojos.Voiture"/> </session-factory> </hibernate-configuration>

7-Maintenant un peu de code Hibernate ... mais juste un peu


crer un nouveau package : "com.chezwouam.hibernatetools" faire un click droit sur le nouveau package choisir New, puis Other, puis dans la branche "Hibernate" slectionner "HibernateUtil.java"

appeler la nouvelle classe : "MyHibTool" (en fait vous faites comme vous voulez)

cliquer sur "Finish"

aller dans la classe Main du projet et saisir le code suivant : package japphibernate_01; import import import import import import com.chezwouam.hibernatetools.MyHibTool; com.chezwouam.pojos.Client; com.chezwouam.pojos.Voiture; org.hibernate.Session; org.hibernate.SessionFactory; org.hibernate.Transaction;

public class Main { public static void main(String[] args) { SessionFactory sf = MyHibTool.getSessionFactory(); Session s = sf.getCurrentSession(); Transaction t = s.beginTransaction(); Client monClient = new Client("BOB", "MARLEY"); Voiture saVoiture = new Voiture("00","BMW","Srie 7"); s.save(saVoiture);

monClient.setAutomobile(saVoiture); s.save(monClient); t.commit(); } } ... et lancer le programme si tout se passe bien, dans la console d'output vous devriez avoir quelque chose comme ceci : ( la fin du message ... l'important c'est le "successful" et pas d'erreur)

INFO: Running hbm2ddl schema export 21 oct. 2009 16:44:18 org.hibernate.tool.hbm2ddl.SchemaExport execute INFO: exporting generated schema to database 21 oct. 2009 16:44:19 org.hibernate.tool.hbm2ddl.SchemaExport execute INFO: schema export complete BUILD SUCCESSFUL (total time: 2 seconds)

Aller faire un tour dans l'onglet "Services" Rafrachir la base (click droit + "refresh") Et l c'est la surprise : le modle de base a t cr ! (magique ;-) )

That's all folks ! Remarques pour aller plus loin : 1. pour faire une relation 1 plusieurs : utiliser l'annotation @ManyToOne 2. crer une classe Projet (par exemple) 3. ajouter une proprit List<Projet> Projets dans la classe Client 4. refaire les manipulations expliques dans le document