15
Créer son modèle de données à partir des entités Hibernate (avec l'aide JPA pour les annotations) version 1.00 du 30/10/2009 Créer son modèle de données à partir des entités Hibernate ......... 1 Auteur : ..................................................................................... 1 Objectif :....................................................................................... 1 Pré-requis : ................................................................................... 1 Introduction................................................................................... 1 1-créer la base de données .............................................................. 2 2-créer le projet ............................................................................. 2 3-référencer les librairies utiles ........................................................ 2 4-on commence à bosser : création des pojos .................................... 3 5- préparation des POJOS à la persistance & relation OneToOne ........... 6 6-Création de la configuration Hibernate ............................................ 9 7-Maintenant un peu de code Hibernate ... mais juste un peu ............. 12 Auteur : Philippe Charrière : [email protected] Société : Astek Lyon Fonction : Responsable avant-ventes & veille technologique Niveau Java (le mien) : newbie Objectif : 1. Jouer avec Hibernate & JPA sans rien y connaître ... Et découvrir que NetBeans est le meilleur IDE Java du monde (si !) 2. Créer une base de données relationnelle à partir d'un modèle 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 créer des entités "métier" (en gros on va faire un modèle objet) et générer la base de données relationnelle automatiquement à partir de ce modèle. Du coup : aucun besoin de connaître le SQL (yesss !!!)

Créer son Modèle de Données à partir des entités Hibernate

  • Upload
    khadija

  • View
    71

  • Download
    3

Embed Size (px)

Citation preview

Créer son modèle de données à partir desentités Hibernate

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

Créer son modèle de données à partir des entités Hibernate ......... 1Auteur : ..................................................................................... 1

Objectif :....................................................................................... 1Pré-requis : ................................................................................... 1Introduction................................................................................... 11-créer la base de données.............................................................. 22-créer le projet ............................................................................. 23-référencer les librairies utiles ........................................................ 24-on commence à bosser : création des pojos ....................................35- préparation des POJOS à la persistance & relation OneToOne ...........66-Création de la configuration Hibernate............................................97-Maintenant un peu de code Hibernate ... mais juste un peu............. 12

Auteur :

Philippe Charrière : [email protected]été : Astek LyonFonction : Responsable avant-ventes & veille technologiqueNiveau Java (le mien) : newbie

Objectif :

1. Jouer avec Hibernate & JPA sans rien y connaître ... Et découvrir que NetBeansest le meilleur IDE Java du monde (si !)

2. Créer une base de données relationnelle à partir d'un modèle objet sans taperune commande SQL

Pré-requis :

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

Introduction

Nous allons créer des entités "métier" (en gros on va faire un modèle objet) et générerla base de données relationnelle automatiquement à partir de ce modèle.Du coup : aucun besoin de connaître le SQL (yesss !!!)

1-créer la base de données

... juste la base, pas les tables. Il n'y aura pas un gramme de SQL dans ce tuto.

Dans un 1er temps, il faut créer une base de données (onglet "Services" dans NetBeans+ Click droit sur Java DB)Puis démarrer la base

2-créer le projet

1. créer un projet de type "Java Application"2. lui donner un nom : JAppHibernate_01 (par exemple)

3-référencer les librairies utiles

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

1. Faire un click droit sur cette branche et sélectionner le menu "Add Library"2. Sélectionner "Hibernate" puis "Persistence"3. Clicker sur le bouton "Add Library"4. Re faire un click droit sur la branche "Libraries" et sélectionner 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 : création des pojos

• dans le projet créer un nouveau package qui va contenir vos objets du domaines: com.chezwouam.pojos (par exemple)

• dans ce répertoire créer dans un 1er temps une nouvelle classe Client avec lecode 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 créer une classe Voiture :

package com.chezwouam.pojos;

public class Voiture {

private Long id;private String immatriculation;private String marque;private 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, Stringmodele) {

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 lafaçon 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- préparation des POJOS à la persistance & relationOneToOne

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

données) et @GeneratedValue(strategy=GenerationType.AUTO) qui permetd'incrémenter 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'estpossible qu'avec JPA

Ce qui nous donne donc les classes Client & Voiture modifiées de la manière suivante :

package com.chezwouam.pojos;

import java.io.Serializable;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;

import javax.persistence.OneToOne;

@Entitypublic class Client implements Serializable {

private Long id;private String nom;private String prenom;

private Voiture automobile;

@OneToOnepublic 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 java.io.Serializable;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;

@Entitypublic class Voiture implements Serializable {

private Long id;private String immatriculation;private String marque;private 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, Stringmodele) {

this.immatriculation = immatriculation;this.marque = marque;this.modele = modele;

}

public Voiture() {}

}

6-Création de la configuration Hibernate

Nous allons maintenant créer le fichier de configuration Hibernate : Click droit sur labranche du projet, choisir "New File"+"Other ..."Sélectionner 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/HibernateConfiguration 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</property><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/HibernateConfiguration 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</property><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 unpeu

• créer un nouveau package : "com.chezwouam.hibernatetools"• faire un click droit sur le nouveau package• choisir New, puis Other, puis dans la branche "Hibernate" sélectionner

"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 com.chezwouam.hibernatetools.MyHibTool;import com.chezwouam.pojos.Client;import com.chezwouam.pojos.Voiture;import org.hibernate.Session;import org.hibernate.SessionFactory;import 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","Série 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 pasd'erreur)

INFO: Running hbm2ddl schema export21 oct. 2009 16:44:18 org.hibernate.tool.hbm2ddl.SchemaExportexecuteINFO: exporting generated schema to database21 oct. 2009 16:44:19 org.hibernate.tool.hbm2ddl.SchemaExportexecuteINFO: schema export completeBUILD SUCCESSFUL (total time: 2 seconds)

• Aller faire un tour dans l'onglet "Services"• Rafraîchir la base (click droit + "refresh")• Et là c'est la surprise : le modèle 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 @ManyToOne2. créer une classe Projet (par exemple)3. ajouter une propriété List<Projet> Projets dans la classe Client4. refaire les manipulations expliquées dans le document