SlideShare une entreprise Scribd logo
1  sur  58
Télécharger pour lire hors ligne
´
Developpement Web - Object Relational Mapping and Hibernate




                ´
               Developpement Web - Object Relational
                      Mapping and Hibernate

                          Jean-Michel Richer
                 jean-michel.richer@univ-angers.fr
             http://www.info.univ-angers.fr/pub/richer




                                 M1/M2 Informatique 2010-2011

                                                                1 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Plan



 Plan



      1   Introduction


      2   JOBYME


      3   Hibernate


      4   Bibliographie




                                                              2 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Plan



 ORM et Hibernate




      Objectifs
          • se familiariser avec l’ORM
          • le mettre en oeuvre sans framework (jobyme)
          • le mettre en oeuvre en utilisant Hibernate




                                                              3 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Introduction



 Introduction




                                                 Introduction




                                                                4 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Introduction



 Que’est-ce que l’ORM ?




      ORM
                                                      ´
      L’ORM ou Object Relational Mapping a pour but d’etablir la
      correspondance entre
                                       ´
         • une table de la base de donnees
                                `
          • et une classe du modele objet




                                                                   5 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Introduction



 Pourquoi l’ORM ?



       ´       ´
      Necessite de l’ORM
                  `                     ´           ´            `
        • le modele logique des donnees est different du modele de
          classe
           ´            ´                              ´
        • reutilisabilite du code pour effectuer les operation de base :

                  • DAO
                  • CRUD




                                                                           6 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Introduction



 Rappel CRUD



      CRUD
                             `
      ensemble des fonctions a implanter dans un BD relationnelle :

                                          ´
                                       Operation                SQL
                                        Create                INSERT
                                    Read (Retrieve)           SELECT
                                        Update                UPDATE
                                    Delete (Destroy)          DELETE




                                                                       7 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Introduction



 Pourquoi l’ORM ?



      Comparaison Objet et Relationnel
             ´
      La representation sous forme Relationnelle n’entre pas en
                                   ´
      correspondance avec la representation Objet
                             ´
        • Objet : notions d’heritage et de polymorphisme
          • Objet : pas d’identifiant (pointeur)
                                              ´ ´
          • Objet : les relations n:m sont modelisees par des
                 containers




                                                                  8 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Introduction



 ORM et Java



      ORM et Java
            ´         ´ `
      Inconvenients lies a Java
          • choix important de solutions et outils / API
            ´
          • evolution des API suivant les versions :
                        ´
              • difficulte d’apprentissage
                        ´
              • difficulte de configuration




                                                              9 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Introduction



 ORM et Java



      ORM, Java et JDBC
      la JDBC (Java DataBase Connectivity) a apporte une´
                                            `               ´
      standardisation au niveau de l’acces des bases de donnees,
      mais :
                   ´                    ´
         • il faut ecrire le code pour realiser le CRUD
                ´
          • et realiser le mapping entre tables et objets




                                                                   10 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Introduction



 ORM et Java



      Solutions existantes
        • API standard : JDO (Java Data Objects + POJO)
          • API : Hibernate + POJO
          • API complexes : EJB Entity

      Frameworks de persistance : http://fr.wikipedia.org
      (Hibernate, Cayenne, EJB3, ...




                                                              11 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Introduction



 ORM et Java



      Comparaison JDO et Hibernate
          • JDO est un standard et Hibernate une solution Open
                 Source
          • JDO peut traiter la persistance des BD Objets ou XML
                 (possible depuis Hibernate 3)
                                          ˆ
          • JDO propose un langage de requete JDOQL / HSQL
          • JDO modifie les POJO alors que ce n’est pas le cas
                 d’Hibernate




                                                                   12 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Introduction



 ORM et Java



      JDO
          • www.oracle.com
          • http://db.apache.org/jdo/index.html

      Hibernate
        • http://www.hibernate.org/




                                                              13 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  JOBYME



 JOBYME




                                                   JOBYME




                                                              14 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  JOBYME



 JOBYME



       ´
      Definition JOBYME
        • Java Orm BY ME
                         ´ ´
        • tentative de generation automatique de l’ORM (Code Java
          + CRUD)
                                       ´ ´
        • lecture de la BD (MySQL) et generation du code
          correspondant




                                                                    15 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  JOBYME



 Etude de cas




      Etude de cas
           ´       ´
      On desire modeliser la relation : Client, Commande, Produit
      (Customer, Command, Product).




                                                                    16 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  JOBYME



 Conventions de nommage


                                      ´
      Conventions de nommage des entites
                                ´                   `          ´
          • tout en minuscule, separation par caractere souligne ( )
                     ˆ                  ´
          • table : meme nom que l’entite (customer)
                          ´ ´                            `
          • attributs : prefixes par les 2 premiers caracteres de la
                             `          ´
              table et caractere souligne (cu )
          • toujours un identifiant (cu id)
          • minimiser la longueur des champs
          • faire en sorte que leurs noms soient explicites




                                                                       17 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  JOBYME



 Cas de la table commande



      Cas de la table commande
                      champ                          ˆ
                                                    role           type    index
                       co id                    identifiant       integer     PK
                      co date                          ´
                                               date creation       date     NX
                   co total price                prix total        float
                     co cu id                identifiant client   integer    NX




                                                                                   18 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  JOBYME



 Conventions de nommage




      Conventions de nommage des relations n/m
                            ´                      ´
          • par ordre alphabetique du nom des entites / tables
                         `                       `                 `
          • nom : 4 premieres lettres de la premiere table, 4 premieres
            lettres
               ´          `                     ´
          • prefixe : premieres lettres des entites




                                                                          19 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  JOBYME



 Cas de la relation commande / produit



      Relation commande / produit : commprod
                   champ                      ˆ
                                             role               type    index
                    cp id                 identifiant          integer     PK
                  cp co id          identifiant commande       integer    NX
                  co pr id            identifiant produit      integer    NX
                   cp qty                         ´
                                           quantite           integer




                                                                                20 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  JOBYME



 JOBYME



                                     ´
      Installation de la base de donnees
                                       ´
      Mettre en place la base de donnees commands.sql sous
      MySQL :
          • nom de la base : commands
          • identifiant de connexion : commuser
          • mot de passe : commpass




                                                              21 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  JOBYME



 Mapping Objet / Relationnel



      Mise en correspondance objet / tuple
       ´    ´
      realisee au travers d’un fichier de description des tables
              ´                    ´ `                         ´
      nomme mapping.xml place a la racine du projet. On decrit le
                                                     ´
      nom de la table et le nom de la classe associee :
          • table : nom de la table
          • class : nom de la classe
                       ´
          • prefix : prefixe du nom de table




                                                                    22 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  JOBYME



 Mapping Objet / Relationnel


      Mise en correspondance relation / attribut
          ´
      on decrit ensuite les relations :
          • type : type de relation (one-to-one, one-to-many)
          • attribute : nom de l’attribut
                                           ´
          • class : nom de la classe associee
                               ´        `
          • crud : liste des operations a effectuer
              (create,retrieve*,update,delete)

      (*) en cascade



                                                                23 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  JOBYME



 DTD du Mapping



      DTD Mapping Objet / Relationnel
           1   <?xml version="1.0" encoding="utf-8" ?>
           2   <!ELEMENT mappings (mapping+) >
           3   <!ELEMENT mapping (relation*) >
           4   <!ATTLIST mapping table CDATA #REQUIRED >
           5   <!ATTLIST mapping class CDATA #REQUIRED >
           6   <!ATTLIST mapping prefix CDATA #REQUIRED >
           7   <!ELEMENT relation EMPTY >
           8   <!ATTLIST relation type CDATA #REQUIRED >
           9   <!ATTLIST relation attribute CDATA #REQUIRED >
          10   <!ATTLIST relation class CDATA #REQUIRED >
          11   <!ATTLIST relation crud CDATA #REQUIRED >
          12




                                                                24 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  JOBYME



 Exemple




      Customer, Command, Product




                                                              25 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  JOBYME



 Mapping
      Mapping Objet / Relationnel
           1   <?xml version="1.0" encoding="UTF-8"?>
           2   <!DOCTYPE mappings SYSTEM "mappings.dtd">
           3   <mappings>
           4     <mapping table="command" class="Command" prefix="co">
           5       <relation type="one-to-one" attribute="customer" class="Customer"'
           6                        crud="retrieve" />
           7       <relation type="one-to-many" attribute="commprods" class="Commprod"'
           8                        crud="create,retrieve*,update,delete" />
           9     </mapping>
          10
          11     <mapping table="customer" class="Customer" prefix="cu">
          12       <relation type="one-to-many" attribute="commands" class="Command"'
          13                        crud="retrieve" />
          14     </mapping>
          15
          16     <mapping table="commprod" class="Commprod" prefix="cp">
          17       <relation type="one-to-one" attribute="product" class="Product"'
          18                        crud="retrieve" />
          19     </mapping>
          20
          21     <mapping table="product" class="Product" prefix="pr" />
          22   </mappings>
          23



                                                                                          26 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  JOBYME



    `          ´ ´ ´
 Modele objet genere



      La classe Command
           1 public class Command extends PersistentObject
           2   implements PersistentInterface {
           3
           4   protected int id;
           5   protected String date;
           6   protected int cuId;
           7   protected float totalPrice;
           8   protected int nbCmdlines;
           9   // relational fields
          10   protected Customer customer;
          11   protected List<Commprod> commprods;
          12 }




                                                              27 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  JOBYME



    `          ´ ´ ´
 Modele objet genere



      La classe Customer
           1 public class Customer extends PersistentObject
           2   implements PersistentInterface {
           3
           4   protected int id;
           5   protected String firstName;
           6   protected String lastName;
           7   protected String email;
           8   protected String password;
           9   protected int rights;
          10   // relational fields
          11   protected List<Command> commands;
          12 }




                                                              28 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  JOBYME



 Persistance

      Mise en place de la persistance




                                                              29 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  JOBYME



 Persistance



      Mise en place de la persistance




                                                              30 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  JOBYME



 Utilisation de JOBYME




      Utiliser JOBYME
                ´
      dans le repertoire du projet lancer : ant
                       ´ ´
        • compile le generateur
             ´ ´               `
          • genere les classes a partir du fichier de mapping
          • lance un test sommaire




                                                               31 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Hibernate




                                                   Hibernate




                                                               32 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Hibernate



      Hibernate
        • framework ORM pour Java (BD Relationnelles et Objet)
               ˆ
        • requetes pour CRUD (HQL Hibernate Query Language)
          • utilisation des POJOs (Plain Old Java Objects)
          • configuration au travers de fichiers XML ou d’annotations
              `
          • tres fortement configurable
              `           `
          • tres difficile a maˆtriser !
                              ı




                                                                      33 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Historique




      Hibernate
                                           `
        • 2001 par Gavin King, alternative a EJB2
          • 2003 version 2 qui devient un standard incontournable
               ´
          • integration JBOSS (RedHat)
          • 2010 version 3 : annotations




                                                                    34 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Mapping Hibernate




      Utilisation des mappings
          • par convention l’extension est .hbm.xml
                ´
          • on definit un fichier par classe / table
                                                 ˆ    ´
          • placer le fichier de mapping dans le meme repertoire que
              le fichier de classe




                                                                      35 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Mapping Hibernate


      fichier Mapping NomClasse.hbm.xml
          • permet de faire le lien entre les champs de la table et ceux
            de la classe
                 ˆ     ´    ´          ´
          • doit etre declare dans le repertoire de la classe




      example Product
                       ´    ´
      Product.hbm.xml declare dans com.mysite.model



                                                                           36 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Mapping Hibernate


         `       ´
      Modele de declaration
           1   <?xml version="1.0" encoding="utf-8"?>
           2   <!DOCTYPE hibernate-mapping
           3     PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
           4     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
           5   <hibernate-mapping package="com.commands.model">
           6
           7   <class name="Product" table="product">
           8     <id name="id" type="integer" column="pr id">
           9        <generator class="native"/>
          10        </id>
          11     <property name="label" column="pr label"/>
          12     <property name="stock" type="int" column="pr stock"/>
          13     <property name="price" type="float" column="pr price"/>
          14   </class>
          15
          16   </hibernate-mapping>
          17




                                                                                 37 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Mapping Hibernate


      Structure du mapping
           1   <hibernate-mapping package="PackageName">
           2   <class
           3     name="ClassName"
           4     table="tableName"
           5       lazy="true|false"
           6     polymorphism="implicit|explicit"
           7     where="arbitrary sql where condition"
           8     rowid="rowid"
           9       subselect="SQL expression"
          10     ...
          11   >
          12     ...
          13   </hibernate-mapping>




                                                              38 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Mapping Hibernate



      Structure du Mapping
          • PackageName : nom du package ou se trouve la classe
          • ClassName : nom de la classe Java
                                                          ´
          • tableName : nom de la table de la base de donnees
                        `     ` ´                           ´
          • autres parametres a definir selon la base de donnees et
              l’environnement




                                                                     39 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Mapping Hibernate




       ´
      Definition des champs de la table
                            ´
          • id : permet de definir l’identifiant de la table
          • property : champ simple
                             ´       ´
          • composite-id : cle composee
          • timestamp : champ de type date/heure




                                                              40 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Mapping Hibernate



      Structure d’un identifiant
           1 <id
           2            name="propertyName"
           3            type="typename"
           4            column="column name"
           5            unsaved-value="null|any|none|undefined|id value"
           6            access="field|property|ClassName">
           7            node="element-name|@attribute-name|element/@attribute|."
           8
           9            <generator class="generatorClass"/>
          10 </id>
          11




                                                                                   41 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Mapping Hibernate



       ´
      Definition d’un identifiant
        • name : nom du champ de la classe
          • type : integer, long, float, string, character, timestamp,
              binary, ...
          • column : nom du champ dans la table
                         ´          ´ ´
          • generator : methode de generation de l’identifiant




                                                                        42 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Mapping Hibernate




       ´          ´ ´
      Methode de generation d’un identifiant
                                                            ´ ´
          • assigned : l’utilisateur est responsable de la generation
                                    ´
          • native : la base de donnees est responsable de la
               ´ ´
              generation




                                                                        43 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Mapping Hibernate


                            ´ ´
      Structure d’une propriete
           1 <property
           2          name="propertyName"
           3          column="column name"
           4          type="typename"
           5          update="true|false"
           6          insert="true|false"
           7          formula="arbitrary SQL expression"
           8          access="field|property|ClassName"
           9          lazy="true|false"
          10          unique="true|false"
          11          not-null="true|false"
          12          index="index name"
          13          unique key="unique key id"
          14          length="L"
          15          precision="P"
          16          scale="S"
          17 />




                                                              44 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Mapping Hibernate



       ´                    ´ ´
      Definition d’une propriete
          • name, type, column
                                                       ˆ         ´
          • update, insert : indique que le champ doit etre ajoute lors
                                             ´     `
            d’une modification ou insertion (defaut a vrai)
                                                       ´
          • formula : expression SQL qui permet de definir le champ
                      `                   ´
          • lazy : acces aux objets associes




                                                                          45 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



      ´
 Strategies de chargement



      Fetching
                                                ´
          • concerne le chargement des objets lies par des relations
                 `                                   ´
          • probleme complexe pour assurer l’efficacite

      Exemple : chargement d’un client
      Faut-il charger toutes les commandes lors du chargement du
      client ?




                                                                       46 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



      ´
 Strategies de chargement



      Fetching strategies
                 ´            ´
      Hibernate definit 4 strategies de chargement
          • Immediate
          • Lazy : ne charge pas tout
                         ´                          ˆ         ´
          • Eager : on specifie quels objets doivent etre charges
          • Batch




                                                                   47 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Utiliser Hibernate




      Utilisation de Hibernate
             ´
        • definir un fichier de configuration
             ´                               ´
          • demarrer Hibernate requiert la creation d’une
              SessionFactory




                                                              48 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Fichier de configuration




      Fichier de configuration hibernate.cfg.xml
             ´              `          ` `                 ´
          • definit les parametres d’acces a la base de donnees
             ´
          • definit ou trouver les fichiers de mapping (ressource)
                    `
                 ˆ        ´          ´
          • doit etre place dans le repertoire src du projet




                                                                   49 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Configuration d’Hibernate
      Fichier de configuration hibernate.cfg.xml
           1 <hibernate-configuration>
           2   <session-factory>
           3     <!-- Database connection settings -->
           4     <property name="connection.driver class">com.mysql.jdbc.Driver<'
           5                         /property>
           6     <property name="connection.url">jdbc:mysql://localhost:3306/commands<'
           7                         /property>
           8     <property name="connection.username">commuser</property>
           9     <property name="connection.password">commpass</property>
          10     <!-- JDBC connection pool (use the built-in) -->
          11     <property name="connection.pool size">1</property>
          12     <!-- SQL dialect -->
          13     <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
          14     <!-- Enable Hibernate’s automatic session context management -->
          15     <property name="current session context class">thread</property>
          16     <!-- Disable the second-level cache -->
          17     <property name="cache.provider class">org.hibernate.cache.'
          18                         NoCacheProvider</property>
          19     <!-- Echo all executed SQL to stdout -->
          20     <property name="show sql">true</property>
          21     <mapping resource="com/mysite/model/command.hbm.xml"/>
          22     </session-factory>
          23 </hibernate-configuration>
          24
          25

                                                                                          50 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 SessionFactory




      classe HibernateUtil
         • obtenir une instance de SessionFactory
            ´
         • realise l’initialisation de la connexion




                                                              51 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 HibernateUtil
      HibernateUtil.java
           1   import org.hibernate.SessionFactory;
           2   import org.hibernate.cfg.Configuration;
           3   import static java.lang.System.err;
           4
           5   public class HibernateUtil {
           6     private static final SessionFactory sessionFactory;
           7     static {
           8        try {
           9           // Create the SessionFactory from hibernate.cfg.xml
          10           sessionFactory = new Configuration().configure().buildSessionFactory()'
          11                                  ;
          12        } catch (Exception ex) {
          13           // Make sure you log the exception, as it might be swallowed
          14           err.println("Initial SessionFactory creation failed." + ex.getMessage('
          15                           ));
          16           throw new ExceptionInInitializerError(ex.getMessage());
          17        }
          18     }
          19
          20       public static SessionFactory getSessionFactory() {
          21          return sessionFactory;
          22       }
          23   }



                                                                                                 52 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Librairies .jar




      Librairies Hibernate
                       ´
      Mettre dans le repertoire WEB-INF/lib ou lib :
          • l’ensemble des fichiers de Hibernate lib/required
                    ´
          • ajouter egalement slf4j-simple
              http://www.slf4j.org/




                                                               53 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 HibernateUtil




      Application
                                                 ´
      Mettre en place la configuration JAVA pour realiser un test avec
      Hibernate




                                                                        54 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Hibernate et annotations



      Annotations
                    `           ´
      Hibernate integre un mecanisme d’annotation qui permet de
      remplacer les fichiers de mapping par des commentaires dans
      le code. L’objectif est de
                    ´
         • ne pas separer le code Java du fichier de mapping
                   ` `
          • de maniere a configurer Hibernate automatiquement




                                                                   55 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Hibernate



 Exemple d’annotations
      Annotations
           1   import org.hibernate.annotations.Index;
           2   @Entity
           3   @Table(name="ARTIST")
           4   @NamedQueries({
           5     @NamesQuery(name="com.oreilly.hh.artistByName",
           6     query="from Artist as artist where upper(artist.name)=upper(:name)")
           7   })
           8   public class Artist {
           9     @Id
          10     @Column(name="ARTIST ID")
          11     @GeneratedValue(strategy=GenerationType.AUTO)
          12     private Integer id;
          13
          14       @Column(name="NAME",nullable=false,unique=true)
          15       @Index(name="ARTIST NAME",columnNames={"NAME"})
          16       private String name;
          17
          18       @ManyToMany
          19       @JoinTable(name="TRACK ARTISTS",
          20          joinColumns={@JoinColumn(name="TRACK ID")},
          21          inverseJoinColumns={@JoinColumn(name="ARTIST ID")})
          22       private Set<Track> tracks;
          23
          24   }



                                                                                        56 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Bibliographie



 Bibliographie




                                               Bibliographie




                                                               57 / 58
´
Developpement Web - Object Relational Mapping and Hibernate
  Bibliographie



 Bibliographie, sitographie



          • Hibernate Quickly, Patrick Peak, Nick Heudecker,
              Manning, 2006
          • Hibernate in Action, Christian Bauer, Gavin King,
              Manning, 2005
          • Harnessing Hibernate, James Elliot, Tim O’Brien, Ryan
              Fowler, O’Reilly, 2008
          • www.hibernate.org




                                                                    58 / 58

Contenu connexe

Similaire à Crs orm

.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?Rui Carvalho
 
Node.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptNode.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptKhalid Jebbari
 
La persistance des données : ORM et hibernate
La persistance des données : ORM et hibernateLa persistance des données : ORM et hibernate
La persistance des données : ORM et hibernateYouness Boukouchi
 
Aperçu de java EE 5
Aperçu de java EE 5Aperçu de java EE 5
Aperçu de java EE 5Quentin Adam
 
Java Code to Java Heap - En Français
Java Code to Java Heap - En FrançaisJava Code to Java Heap - En Français
Java Code to Java Heap - En FrançaisChris Bailey
 
Clean Architecture et Code patrimonial
Clean Architecture et Code patrimonialClean Architecture et Code patrimonial
Clean Architecture et Code patrimonialAgile Montréal
 
Formation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPFFormation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPFBoubker ABERWAG
 
La caisse à outils de la visualisation d'informations
La caisse à outils de la visualisation d'informationsLa caisse à outils de la visualisation d'informations
La caisse à outils de la visualisation d'informationsChristopheTricot
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesENSET, Université Hassan II Casablanca
 
developpement web framework cms developpement brute
developpement web framework cms developpement brutedeveloppement web framework cms developpement brute
developpement web framework cms developpement bruteYounesOuladSayad1
 

Similaire à Crs orm (20)

ORM
ORMORM
ORM
 
ORM
ORMORM
ORM
 
ORM
ORMORM
ORM
 
ORM
ORMORM
ORM
 
ORM
ORMORM
ORM
 
ORM
ORMORM
ORM
 
ORM
ORMORM
ORM
 
Design Pattern JEE
Design Pattern JEEDesign Pattern JEE
Design Pattern JEE
 
.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?
 
Node.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptNode.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascript
 
La persistance des données : ORM et hibernate
La persistance des données : ORM et hibernateLa persistance des données : ORM et hibernate
La persistance des données : ORM et hibernate
 
Aperçu de java EE 5
Aperçu de java EE 5Aperçu de java EE 5
Aperçu de java EE 5
 
Java Code to Java Heap - En Français
Java Code to Java Heap - En FrançaisJava Code to Java Heap - En Français
Java Code to Java Heap - En Français
 
Clean Architecture et Code patrimonial
Clean Architecture et Code patrimonialClean Architecture et Code patrimonial
Clean Architecture et Code patrimonial
 
Formation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPFFormation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPF
 
_JCVFr
_JCVFr_JCVFr
_JCVFr
 
La caisse à outils de la visualisation d'informations
La caisse à outils de la visualisation d'informationsLa caisse à outils de la visualisation d'informations
La caisse à outils de la visualisation d'informations
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependances
 
Gradle_LyonJUG
Gradle_LyonJUGGradle_LyonJUG
Gradle_LyonJUG
 
developpement web framework cms developpement brute
developpement web framework cms developpement brutedeveloppement web framework cms developpement brute
developpement web framework cms developpement brute
 

Crs orm

  • 1. ´ Developpement Web - Object Relational Mapping and Hibernate ´ Developpement Web - Object Relational Mapping and Hibernate Jean-Michel Richer jean-michel.richer@univ-angers.fr http://www.info.univ-angers.fr/pub/richer M1/M2 Informatique 2010-2011 1 / 58
  • 2. ´ Developpement Web - Object Relational Mapping and Hibernate Plan Plan 1 Introduction 2 JOBYME 3 Hibernate 4 Bibliographie 2 / 58
  • 3. ´ Developpement Web - Object Relational Mapping and Hibernate Plan ORM et Hibernate Objectifs • se familiariser avec l’ORM • le mettre en oeuvre sans framework (jobyme) • le mettre en oeuvre en utilisant Hibernate 3 / 58
  • 4. ´ Developpement Web - Object Relational Mapping and Hibernate Introduction Introduction Introduction 4 / 58
  • 5. ´ Developpement Web - Object Relational Mapping and Hibernate Introduction Que’est-ce que l’ORM ? ORM ´ L’ORM ou Object Relational Mapping a pour but d’etablir la correspondance entre ´ • une table de la base de donnees ` • et une classe du modele objet 5 / 58
  • 6. ´ Developpement Web - Object Relational Mapping and Hibernate Introduction Pourquoi l’ORM ? ´ ´ Necessite de l’ORM ` ´ ´ ` • le modele logique des donnees est different du modele de classe ´ ´ ´ • reutilisabilite du code pour effectuer les operation de base : • DAO • CRUD 6 / 58
  • 7. ´ Developpement Web - Object Relational Mapping and Hibernate Introduction Rappel CRUD CRUD ` ensemble des fonctions a implanter dans un BD relationnelle : ´ Operation SQL Create INSERT Read (Retrieve) SELECT Update UPDATE Delete (Destroy) DELETE 7 / 58
  • 8. ´ Developpement Web - Object Relational Mapping and Hibernate Introduction Pourquoi l’ORM ? Comparaison Objet et Relationnel ´ La representation sous forme Relationnelle n’entre pas en ´ correspondance avec la representation Objet ´ • Objet : notions d’heritage et de polymorphisme • Objet : pas d’identifiant (pointeur) ´ ´ • Objet : les relations n:m sont modelisees par des containers 8 / 58
  • 9. ´ Developpement Web - Object Relational Mapping and Hibernate Introduction ORM et Java ORM et Java ´ ´ ` Inconvenients lies a Java • choix important de solutions et outils / API ´ • evolution des API suivant les versions : ´ • difficulte d’apprentissage ´ • difficulte de configuration 9 / 58
  • 10. ´ Developpement Web - Object Relational Mapping and Hibernate Introduction ORM et Java ORM, Java et JDBC la JDBC (Java DataBase Connectivity) a apporte une´ ` ´ standardisation au niveau de l’acces des bases de donnees, mais : ´ ´ • il faut ecrire le code pour realiser le CRUD ´ • et realiser le mapping entre tables et objets 10 / 58
  • 11. ´ Developpement Web - Object Relational Mapping and Hibernate Introduction ORM et Java Solutions existantes • API standard : JDO (Java Data Objects + POJO) • API : Hibernate + POJO • API complexes : EJB Entity Frameworks de persistance : http://fr.wikipedia.org (Hibernate, Cayenne, EJB3, ... 11 / 58
  • 12. ´ Developpement Web - Object Relational Mapping and Hibernate Introduction ORM et Java Comparaison JDO et Hibernate • JDO est un standard et Hibernate une solution Open Source • JDO peut traiter la persistance des BD Objets ou XML (possible depuis Hibernate 3) ˆ • JDO propose un langage de requete JDOQL / HSQL • JDO modifie les POJO alors que ce n’est pas le cas d’Hibernate 12 / 58
  • 13. ´ Developpement Web - Object Relational Mapping and Hibernate Introduction ORM et Java JDO • www.oracle.com • http://db.apache.org/jdo/index.html Hibernate • http://www.hibernate.org/ 13 / 58
  • 14. ´ Developpement Web - Object Relational Mapping and Hibernate JOBYME JOBYME JOBYME 14 / 58
  • 15. ´ Developpement Web - Object Relational Mapping and Hibernate JOBYME JOBYME ´ Definition JOBYME • Java Orm BY ME ´ ´ • tentative de generation automatique de l’ORM (Code Java + CRUD) ´ ´ • lecture de la BD (MySQL) et generation du code correspondant 15 / 58
  • 16. ´ Developpement Web - Object Relational Mapping and Hibernate JOBYME Etude de cas Etude de cas ´ ´ On desire modeliser la relation : Client, Commande, Produit (Customer, Command, Product). 16 / 58
  • 17. ´ Developpement Web - Object Relational Mapping and Hibernate JOBYME Conventions de nommage ´ Conventions de nommage des entites ´ ` ´ • tout en minuscule, separation par caractere souligne ( ) ˆ ´ • table : meme nom que l’entite (customer) ´ ´ ` • attributs : prefixes par les 2 premiers caracteres de la ` ´ table et caractere souligne (cu ) • toujours un identifiant (cu id) • minimiser la longueur des champs • faire en sorte que leurs noms soient explicites 17 / 58
  • 18. ´ Developpement Web - Object Relational Mapping and Hibernate JOBYME Cas de la table commande Cas de la table commande champ ˆ role type index co id identifiant integer PK co date ´ date creation date NX co total price prix total float co cu id identifiant client integer NX 18 / 58
  • 19. ´ Developpement Web - Object Relational Mapping and Hibernate JOBYME Conventions de nommage Conventions de nommage des relations n/m ´ ´ • par ordre alphabetique du nom des entites / tables ` ` ` • nom : 4 premieres lettres de la premiere table, 4 premieres lettres ´ ` ´ • prefixe : premieres lettres des entites 19 / 58
  • 20. ´ Developpement Web - Object Relational Mapping and Hibernate JOBYME Cas de la relation commande / produit Relation commande / produit : commprod champ ˆ role type index cp id identifiant integer PK cp co id identifiant commande integer NX co pr id identifiant produit integer NX cp qty ´ quantite integer 20 / 58
  • 21. ´ Developpement Web - Object Relational Mapping and Hibernate JOBYME JOBYME ´ Installation de la base de donnees ´ Mettre en place la base de donnees commands.sql sous MySQL : • nom de la base : commands • identifiant de connexion : commuser • mot de passe : commpass 21 / 58
  • 22. ´ Developpement Web - Object Relational Mapping and Hibernate JOBYME Mapping Objet / Relationnel Mise en correspondance objet / tuple ´ ´ realisee au travers d’un fichier de description des tables ´ ´ ` ´ nomme mapping.xml place a la racine du projet. On decrit le ´ nom de la table et le nom de la classe associee : • table : nom de la table • class : nom de la classe ´ • prefix : prefixe du nom de table 22 / 58
  • 23. ´ Developpement Web - Object Relational Mapping and Hibernate JOBYME Mapping Objet / Relationnel Mise en correspondance relation / attribut ´ on decrit ensuite les relations : • type : type de relation (one-to-one, one-to-many) • attribute : nom de l’attribut ´ • class : nom de la classe associee ´ ` • crud : liste des operations a effectuer (create,retrieve*,update,delete) (*) en cascade 23 / 58
  • 24. ´ Developpement Web - Object Relational Mapping and Hibernate JOBYME DTD du Mapping DTD Mapping Objet / Relationnel 1 <?xml version="1.0" encoding="utf-8" ?> 2 <!ELEMENT mappings (mapping+) > 3 <!ELEMENT mapping (relation*) > 4 <!ATTLIST mapping table CDATA #REQUIRED > 5 <!ATTLIST mapping class CDATA #REQUIRED > 6 <!ATTLIST mapping prefix CDATA #REQUIRED > 7 <!ELEMENT relation EMPTY > 8 <!ATTLIST relation type CDATA #REQUIRED > 9 <!ATTLIST relation attribute CDATA #REQUIRED > 10 <!ATTLIST relation class CDATA #REQUIRED > 11 <!ATTLIST relation crud CDATA #REQUIRED > 12 24 / 58
  • 25. ´ Developpement Web - Object Relational Mapping and Hibernate JOBYME Exemple Customer, Command, Product 25 / 58
  • 26. ´ Developpement Web - Object Relational Mapping and Hibernate JOBYME Mapping Mapping Objet / Relationnel 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mappings SYSTEM "mappings.dtd"> 3 <mappings> 4 <mapping table="command" class="Command" prefix="co"> 5 <relation type="one-to-one" attribute="customer" class="Customer"' 6 crud="retrieve" /> 7 <relation type="one-to-many" attribute="commprods" class="Commprod"' 8 crud="create,retrieve*,update,delete" /> 9 </mapping> 10 11 <mapping table="customer" class="Customer" prefix="cu"> 12 <relation type="one-to-many" attribute="commands" class="Command"' 13 crud="retrieve" /> 14 </mapping> 15 16 <mapping table="commprod" class="Commprod" prefix="cp"> 17 <relation type="one-to-one" attribute="product" class="Product"' 18 crud="retrieve" /> 19 </mapping> 20 21 <mapping table="product" class="Product" prefix="pr" /> 22 </mappings> 23 26 / 58
  • 27. ´ Developpement Web - Object Relational Mapping and Hibernate JOBYME ` ´ ´ ´ Modele objet genere La classe Command 1 public class Command extends PersistentObject 2 implements PersistentInterface { 3 4 protected int id; 5 protected String date; 6 protected int cuId; 7 protected float totalPrice; 8 protected int nbCmdlines; 9 // relational fields 10 protected Customer customer; 11 protected List<Commprod> commprods; 12 } 27 / 58
  • 28. ´ Developpement Web - Object Relational Mapping and Hibernate JOBYME ` ´ ´ ´ Modele objet genere La classe Customer 1 public class Customer extends PersistentObject 2 implements PersistentInterface { 3 4 protected int id; 5 protected String firstName; 6 protected String lastName; 7 protected String email; 8 protected String password; 9 protected int rights; 10 // relational fields 11 protected List<Command> commands; 12 } 28 / 58
  • 29. ´ Developpement Web - Object Relational Mapping and Hibernate JOBYME Persistance Mise en place de la persistance 29 / 58
  • 30. ´ Developpement Web - Object Relational Mapping and Hibernate JOBYME Persistance Mise en place de la persistance 30 / 58
  • 31. ´ Developpement Web - Object Relational Mapping and Hibernate JOBYME Utilisation de JOBYME Utiliser JOBYME ´ dans le repertoire du projet lancer : ant ´ ´ • compile le generateur ´ ´ ` • genere les classes a partir du fichier de mapping • lance un test sommaire 31 / 58
  • 32. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Hibernate Hibernate 32 / 58
  • 33. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Hibernate Hibernate • framework ORM pour Java (BD Relationnelles et Objet) ˆ • requetes pour CRUD (HQL Hibernate Query Language) • utilisation des POJOs (Plain Old Java Objects) • configuration au travers de fichiers XML ou d’annotations ` • tres fortement configurable ` ` • tres difficile a maˆtriser ! ı 33 / 58
  • 34. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Historique Hibernate ` • 2001 par Gavin King, alternative a EJB2 • 2003 version 2 qui devient un standard incontournable ´ • integration JBOSS (RedHat) • 2010 version 3 : annotations 34 / 58
  • 35. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Mapping Hibernate Utilisation des mappings • par convention l’extension est .hbm.xml ´ • on definit un fichier par classe / table ˆ ´ • placer le fichier de mapping dans le meme repertoire que le fichier de classe 35 / 58
  • 36. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Mapping Hibernate fichier Mapping NomClasse.hbm.xml • permet de faire le lien entre les champs de la table et ceux de la classe ˆ ´ ´ ´ • doit etre declare dans le repertoire de la classe example Product ´ ´ Product.hbm.xml declare dans com.mysite.model 36 / 58
  • 37. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Mapping Hibernate ` ´ Modele de declaration 1 <?xml version="1.0" encoding="utf-8"?> 2 <!DOCTYPE hibernate-mapping 3 PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping package="com.commands.model"> 6 7 <class name="Product" table="product"> 8 <id name="id" type="integer" column="pr id"> 9 <generator class="native"/> 10 </id> 11 <property name="label" column="pr label"/> 12 <property name="stock" type="int" column="pr stock"/> 13 <property name="price" type="float" column="pr price"/> 14 </class> 15 16 </hibernate-mapping> 17 37 / 58
  • 38. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Mapping Hibernate Structure du mapping 1 <hibernate-mapping package="PackageName"> 2 <class 3 name="ClassName" 4 table="tableName" 5 lazy="true|false" 6 polymorphism="implicit|explicit" 7 where="arbitrary sql where condition" 8 rowid="rowid" 9 subselect="SQL expression" 10 ... 11 > 12 ... 13 </hibernate-mapping> 38 / 58
  • 39. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Mapping Hibernate Structure du Mapping • PackageName : nom du package ou se trouve la classe • ClassName : nom de la classe Java ´ • tableName : nom de la table de la base de donnees ` ` ´ ´ • autres parametres a definir selon la base de donnees et l’environnement 39 / 58
  • 40. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Mapping Hibernate ´ Definition des champs de la table ´ • id : permet de definir l’identifiant de la table • property : champ simple ´ ´ • composite-id : cle composee • timestamp : champ de type date/heure 40 / 58
  • 41. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Mapping Hibernate Structure d’un identifiant 1 <id 2 name="propertyName" 3 type="typename" 4 column="column name" 5 unsaved-value="null|any|none|undefined|id value" 6 access="field|property|ClassName"> 7 node="element-name|@attribute-name|element/@attribute|." 8 9 <generator class="generatorClass"/> 10 </id> 11 41 / 58
  • 42. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Mapping Hibernate ´ Definition d’un identifiant • name : nom du champ de la classe • type : integer, long, float, string, character, timestamp, binary, ... • column : nom du champ dans la table ´ ´ ´ • generator : methode de generation de l’identifiant 42 / 58
  • 43. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Mapping Hibernate ´ ´ ´ Methode de generation d’un identifiant ´ ´ • assigned : l’utilisateur est responsable de la generation ´ • native : la base de donnees est responsable de la ´ ´ generation 43 / 58
  • 44. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Mapping Hibernate ´ ´ Structure d’une propriete 1 <property 2 name="propertyName" 3 column="column name" 4 type="typename" 5 update="true|false" 6 insert="true|false" 7 formula="arbitrary SQL expression" 8 access="field|property|ClassName" 9 lazy="true|false" 10 unique="true|false" 11 not-null="true|false" 12 index="index name" 13 unique key="unique key id" 14 length="L" 15 precision="P" 16 scale="S" 17 /> 44 / 58
  • 45. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Mapping Hibernate ´ ´ ´ Definition d’une propriete • name, type, column ˆ ´ • update, insert : indique que le champ doit etre ajoute lors ´ ` d’une modification ou insertion (defaut a vrai) ´ • formula : expression SQL qui permet de definir le champ ` ´ • lazy : acces aux objets associes 45 / 58
  • 46. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate ´ Strategies de chargement Fetching ´ • concerne le chargement des objets lies par des relations ` ´ • probleme complexe pour assurer l’efficacite Exemple : chargement d’un client Faut-il charger toutes les commandes lors du chargement du client ? 46 / 58
  • 47. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate ´ Strategies de chargement Fetching strategies ´ ´ Hibernate definit 4 strategies de chargement • Immediate • Lazy : ne charge pas tout ´ ˆ ´ • Eager : on specifie quels objets doivent etre charges • Batch 47 / 58
  • 48. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Utiliser Hibernate Utilisation de Hibernate ´ • definir un fichier de configuration ´ ´ • demarrer Hibernate requiert la creation d’une SessionFactory 48 / 58
  • 49. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Fichier de configuration Fichier de configuration hibernate.cfg.xml ´ ` ` ` ´ • definit les parametres d’acces a la base de donnees ´ • definit ou trouver les fichiers de mapping (ressource) ` ˆ ´ ´ • doit etre place dans le repertoire src du projet 49 / 58
  • 50. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Configuration d’Hibernate Fichier de configuration hibernate.cfg.xml 1 <hibernate-configuration> 2 <session-factory> 3 <!-- Database connection settings --> 4 <property name="connection.driver class">com.mysql.jdbc.Driver<' 5 /property> 6 <property name="connection.url">jdbc:mysql://localhost:3306/commands<' 7 /property> 8 <property name="connection.username">commuser</property> 9 <property name="connection.password">commpass</property> 10 <!-- JDBC connection pool (use the built-in) --> 11 <property name="connection.pool size">1</property> 12 <!-- SQL dialect --> 13 <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 14 <!-- Enable Hibernate’s automatic session context management --> 15 <property name="current session context class">thread</property> 16 <!-- Disable the second-level cache --> 17 <property name="cache.provider class">org.hibernate.cache.' 18 NoCacheProvider</property> 19 <!-- Echo all executed SQL to stdout --> 20 <property name="show sql">true</property> 21 <mapping resource="com/mysite/model/command.hbm.xml"/> 22 </session-factory> 23 </hibernate-configuration> 24 25 50 / 58
  • 51. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate SessionFactory classe HibernateUtil • obtenir une instance de SessionFactory ´ • realise l’initialisation de la connexion 51 / 58
  • 52. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate HibernateUtil HibernateUtil.java 1 import org.hibernate.SessionFactory; 2 import org.hibernate.cfg.Configuration; 3 import static java.lang.System.err; 4 5 public class HibernateUtil { 6 private static final SessionFactory sessionFactory; 7 static { 8 try { 9 // Create the SessionFactory from hibernate.cfg.xml 10 sessionFactory = new Configuration().configure().buildSessionFactory()' 11 ; 12 } catch (Exception ex) { 13 // Make sure you log the exception, as it might be swallowed 14 err.println("Initial SessionFactory creation failed." + ex.getMessage(' 15 )); 16 throw new ExceptionInInitializerError(ex.getMessage()); 17 } 18 } 19 20 public static SessionFactory getSessionFactory() { 21 return sessionFactory; 22 } 23 } 52 / 58
  • 53. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Librairies .jar Librairies Hibernate ´ Mettre dans le repertoire WEB-INF/lib ou lib : • l’ensemble des fichiers de Hibernate lib/required ´ • ajouter egalement slf4j-simple http://www.slf4j.org/ 53 / 58
  • 54. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate HibernateUtil Application ´ Mettre en place la configuration JAVA pour realiser un test avec Hibernate 54 / 58
  • 55. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Hibernate et annotations Annotations ` ´ Hibernate integre un mecanisme d’annotation qui permet de remplacer les fichiers de mapping par des commentaires dans le code. L’objectif est de ´ • ne pas separer le code Java du fichier de mapping ` ` • de maniere a configurer Hibernate automatiquement 55 / 58
  • 56. ´ Developpement Web - Object Relational Mapping and Hibernate Hibernate Exemple d’annotations Annotations 1 import org.hibernate.annotations.Index; 2 @Entity 3 @Table(name="ARTIST") 4 @NamedQueries({ 5 @NamesQuery(name="com.oreilly.hh.artistByName", 6 query="from Artist as artist where upper(artist.name)=upper(:name)") 7 }) 8 public class Artist { 9 @Id 10 @Column(name="ARTIST ID") 11 @GeneratedValue(strategy=GenerationType.AUTO) 12 private Integer id; 13 14 @Column(name="NAME",nullable=false,unique=true) 15 @Index(name="ARTIST NAME",columnNames={"NAME"}) 16 private String name; 17 18 @ManyToMany 19 @JoinTable(name="TRACK ARTISTS", 20 joinColumns={@JoinColumn(name="TRACK ID")}, 21 inverseJoinColumns={@JoinColumn(name="ARTIST ID")}) 22 private Set<Track> tracks; 23 24 } 56 / 58
  • 57. ´ Developpement Web - Object Relational Mapping and Hibernate Bibliographie Bibliographie Bibliographie 57 / 58
  • 58. ´ Developpement Web - Object Relational Mapping and Hibernate Bibliographie Bibliographie, sitographie • Hibernate Quickly, Patrick Peak, Nick Heudecker, Manning, 2006 • Hibernate in Action, Christian Bauer, Gavin King, Manning, 2005 • Harnessing Hibernate, James Elliot, Tim O’Brien, Ryan Fowler, O’Reilly, 2008 • www.hibernate.org 58 / 58