JAVA PERSISTENCE API JPA HIBERNATE INTI FORMATION JAVA
JAVA PERSISTENCE API (JPA)& HIBERNATE INTI- FORMATION
JAVA PERSISTENCE API (JPA) INTI- FORMATION
JPA Sommaire • • • Mapping Objet relationnel Architecture de gestion de persistance JPA vue d’ensemble Implémentation JPA Architecture JPA Introduire le persitence. xml Configuration du mapping JPA via annotations Entity Manager et son contexte de persistance JPQL API Criteria INTI- FORMATION 3
JPA Mapping Objet relationnel • L'objectif principal d'une technologie de mapping objet/Relationnel est d'établir une correspondance relativement transparente et efficace entre : § un ensemble d'objets en mémoire § un ensemble d'enregistrements d'une base relationnelle. • �Une telle technologie doit permettre à un programme orienté objet de nevoir que des objets dont certains sont des objets persistants. Le code SQL est en très grande partie caché car les objets persistants sont automatiquement pris en charge par la technologie "O. R. M. ". • Autrement dit , le code SQL n'est plus (ou très peu) dans le code "java" mais est généré automatiquement à partir d'une configuration de mapping (fichiers XML, annotations, . . . ). INTI- FORMATION 4
JPA Mapping Objet relationnel INTI- FORMATION 5
JPA L’architecture de gestion de persistence Dans une architecture en couche, il est important de prévoir une couche dédiée aux accès aux données. • Il est assez fréquent dans cette couche de parler de la notion de CRUD qui représentent un ensemble des 4 opérations de bases réalisable sur une données. • Il est aussi de bon usage de mettre en œuvre le design pattern DAO (Data Access Object) proposé par Sun. La partie du code responsable de l’accès aux données dans une application multi niveaux doit être encapsulée dans une couche dédiée aux interactions avec la base de données de l’architecture généralement appelée couche de persistance. Celle-ci permet notamment : § d’ajouter un niveau d’abstraction entre la base de données et l’utilisation qui en est faite. § de simplifier la couche métier qui utilise les traitements de cette couche § de masquer les traitements réalisés pour mapper les objets dans la base de données et vice et versa § de faciliter le remplacement de la base de données utilisée INTI- FORMATION 6
JPA L’architecture de gestion de persistence La couche métier • utilise la couche de persistance et reste indépendante du code dédié à l’accès à la base de données. • La couche métier ne contient aucune requête SQL, ni code de connexion ou d’accès à la base de données. • La couche métier utilise les classes de la couche métier qui encapsulent ces traitements. • La couche métier manipule uniquement des objets pour les accès à la base de données. Le choix des API ou des outils dépends du contexte : certaines solutions ne sont utilisables qu’avec la plate-forme Enterprise Edition (exemple : les EJB) ou sont utilisables indifféremment avec les plates-formes Standard et Enterprise Edition. L’utilisation d’une API standard permet de garantir la pérennité et de choisir l’implémentation à mettre en œuvre INTI- FORMATION 7
JPA Les opérations de type CRUD • L’acronyme CRUD signifie : Create, Read, Update and Delete. Il désigne les quatre opérations réalisables sur des données (création, lecture, mise à jour et suppression). Exemple : une interface qui propose des opérations de type CRUD pour un objet de type Entite public interface Entite. Crud { public Entite obtenir(Integer id); public void creer(Entite entite); public void modifier(Entite entite); public Collection obtenir. Tous(); public void supprimer(Entite entite); } INTI- FORMATION 8
JPA Le modèle de conception DAO (Data Access Object) (1/2) • • C’est un modèle de conception qui propose de découpler l’accès à une source de données. L’accès aux données dépend fortement de la source de données. Par exemple, l’utilisation d’une base de données est spécifique pour chaque fournisseur. Même si SQL et JDBC assurent une partie de l’indépendance vis-à-vis de la base de données utilisées, • certaines contraintes imposent une mise à en œuvre spécifique de certaines fonctionnalités. Par exemple, la gestion des champs de type identifiants est proposée selon diverses formes par les bases de données : champ auto-incrémenté, identity, séquence, . . . • Le motif de conception DAO proposé dans le blue print de Sun propose de séparer les traitements d’accès physique à une source de données de leur utilisation dans les objets métiers. • Cette séparation permet de modifier une source de données sans avoir à modifier les traitements qui l’utilise. • Le DAO peut aussi proposer un mécanisme pour rendre l’accès aux bases de données indépendant de la base de données utilisées et même rendre celle-ci paramétrable. ◮ • Les classes métier utilisent le DAO via son interface et sont donc indépendantes de son implémentation. INTI- FORMATION 9
JPA Le modèle de conception DAO (Data Access Object) (2/2) • Si cette implémentation change (par exemple un changement de base de données), seul l’implémentation du DAO est modifié mais les classes qui l’utilisent via son interface ne sont pas impactées. • Le DAO définit donc une interface qui va exposer les fonctionnalités utilisables • Ces fonctionnalités doivent être indépendantes de l’implémentation sous jacente. • Par exemple, aucune méthode ne doit avoir de requêtes SQL en paramètre. • Pour les même raisons, le DAO doit proposer sa propre hiérarchie d’exceptions. • Une implémentation concrète de cette interface doit être proposée. • Cette implémentation peut être plus ou moins complexe en fonction de critères de simplicité ou de flexibilité. • Fréquemment les DAO ne mettent pas en œuvre certaines fonctionnalités comme la mise en œuvre d’un cache ou la gestion des accès concurrents. INTI- FORMATION 10
JPA Les APIs Standards • JDBC : déjà vu. • JDO : acronyme de Java Data Object. Le but de cet API est de rendre transparent la persistance d’un objet. Il repose sur l’enrichissement de byte-code à la compilation. • Les Enterprise Java. Beans (EJB) 2. 0 : Les EJB (Enterprise Java Bean) proposent des beans de type Entités pour assurer la persistance des objets. Les EJB de type Entité peuvent être de deux types : • CMP (Container Managed Persistance) : la persistance est assuré par le conteneur d’EJB en fonction du paramétrage fourni • BMP (Bean Managed Persistance) : Les EJB bénéficient des services proposés par le conteneur cependant cela les rends dépendant de ce conteneur pour l’exécution : ils sont difficilement utilisables en dehors du conteneur (par exemple pour les tester). INTI- FORMATION 11
JPA Java Persistence API (JPA) et les EJB 3. 0 • L’API repose sur l’utilisation d’entités persistantes sous la forme de POJOs un gestionnaire de persistance (Entity. Manager) qui assure la gestion des entités persistantes l’utilisation d’annotations la configuration via des fichiers xml • JPA peut être utilisé avec Java EE dans un serveur d’application mais aussi avec Java SE (avec quelques fonctionnalités proposées par le conteneur en moins). • JPA est une spécification : il est nécessaire d’utiliser une implémentation pour la mettre en œuvre. • L’implémentation de référence est la partie open source d’Oracle Toplink : Toplink essential. • La version 3. 2 d’Hibernate implémente aussi JPA. • JPA ne peut être utilisé qu’avec des bases de données relationnelles. INTI- FORMATION 12
JPA • La Java Persistence API (abrégée en JPA), est une interface de programmation Java ( API ) permettant aux développeurs d'organiser des données relationnelles dans des applications utilisant la plateforme Java. • �La Java Persistence API repose essentiellement sur l'utilisation des annotations, introduites dans Java 5. Elles permettent de définir facilement des objets métier, qui pourront servir d'interface entre la base de données et l'application, dans le cadre d'un mapping objet-relationnel. • Utilisable dans les contextes suivants: - dans module d'EJB 3 - dans module Spring - de façon autonome (java sans serveur) • � INTI- FORMATION 13
JPA Vue D’ensemble INTI- FORMATION 14
JPA Vue D’ensemble Persisitence. xml Data-Source Service Métier (Spring ou EJB 3) INTI- FORMATION Mapping 15
JPA Implémentation de JPA Plusieurs implémentations disponibles: Open. JPA , Hibernate depuis version 3. 2 , Top. Link , Eclipse. Link (Eclipse. Link est l'implementtaion reference de JPA) Selon le contexte, l'implémentation de JPA sera libre ou bien quasi imposée par le serveurd'applications (ex : JBoss Application Serveur utilise en interne Hibernate pour implémenter JPA) INTI- FORMATION 16
JPA Architecture JPA • Entity. Manager. F actory Ceci est une classe d'usine de Entity. Manager. Il crée et gère de multiples instances de Entity. Manager. • �Entity. Manager Il est une interface, il gère les opérations de persistance des objets. Il fonctionne comme usine de requêtes. • �Entity les entities sont les objets de la persistance, stockées sous forme d'enregistrements dans la base de données. • �Entity. T ransaction Il a relation one-to-one avec Entity. Manager. Pour chaque Entity. Manager, les opérations sont maintenues par classe Entity. Transaction. • �Persistance Cette classe contient des méthodes statiques pour obtenir par exemple Entity. Manager. Factory. • �Query Cette interface est implémentée par chaque fournisseur JPA pour obtenir des objets relationnels qui répondent aux queries INTI- FORMATION 17
JPA Que fait un entity manager? INTI- FORMATION 18
JPA Architecture JPA L'api JPA peut être utilisée de façon très variable (dans EJB 3 , dans Spring ou seul) INTI- FORMATION 19
JPA Fichier persistence. xml • Toute application JPA doit comporter au moins un fichier persistence. xml. • C'est dans ce fichier que se trouvent tous les éléments qui permettent de créer les unités de persistance INTI- FORMATION 20
JPA Fichier persistence. xml • L'élément racine de ce fichier est persistence: Cet élément peut comporter autant de sous-éléments persistence-unit que l'on veut. • Chaque élément persistence - unit définit une unité de persistance. Il doit porter un nom (attribut name), et un attribut transaction-type, qui peut prendre deux valeurs : RESOURCE_LOCAL comme ici, ou JTA. • Cet élément persistence-unit doit comporter un unique sous-élément provider. C'est cet élément qui définit l'implémentation JPA utilisée. Ici, il s'agit d'Eclipse. Link • Ensuite, le persistence. xml définit la liste des classes persistantes. • Une liste de propriétés, qui vont permettre à l'unité de persistance de fonctionner. INTI- FORMATION 21
JPA Fichier persistence. xml (facultatif)
JPA Fichier persistence. xml (facultatif) • • <persistence-unit> comporte un attribut optionnel "transaction-type" dont les valeurs possibles sont "JTA" ou "RESOURCE_LOCAL". La valeur par défaut est "JTA" dans un env. EE (ex : EJB 3) et "RESOURCE_LOCAL" dans un env. SE. La valeur de <jta-data-source> ou <non-jta-data-source> correspond au nom JNDI global de la source de données SQL (pool de connexions permettant d'atteindre une base de données précise) [Rappel : le serveur Jboss A. S. ajoute le préfixe "java: /" sur les noms JNDI des "data. Sources"] L'ensemble des classes (avec annotations @Entity) devant être prises en compte et prises en charge par le contexte de persistance se définit via une (ou plusieurs et complémentaires) indication(s) suivante(s): • Une liste explicite de classes (balises <class> ) • un ou plusieurs fichier(s) xml de mapping "objet/relationnel" (balises <mapping-file>) • INTI- FORMATION 23
JPA Fichier persistence. xml (facultatif) Dans le cas particulier d'un module EJB 3 , les classes comportant des annotations @Entity seront automatiquement détectées et il n'est donc pas absolument nécessaire de les déclarées dans le fichier META_INF/persistence. xml Par contre avec Spring, les <class>p. Entity. Class</class> doivent être explicitées. NB: un fichier xml de type orm. xml constitue soit une alternative vis à vis d'une configurationbasée sur des annotations Java 5 , soit un mécanisme de redéfinition. Dans le cas où JPA est implémenté via la sous couche Hibernate , on peut éventuellement fixer lapropriété hibernate. hbm 2 ddl. auto à l'une des valeurs suivantes : * create-drop [créer les tables au démarrage de l'application et les supprime à l'arrêt] * update [mise à jour des tables sans suppression] * none (ou le tout en commentaire) ===> Les "create table" sont générés à partir des informations @Table , @Column… ===> Cette fonctionnalité peut être pratique en mode développement mais est très dangereuseen mode production !!! INTI- FORMATION 24
JPA Fichier persistence. xml Variante de META-INF/persistence. xml pour intégration dans Spring : NB : <provider>. . . Hiernate. Persistence</provider> permet de préciser que la technologie Hibernate est choisie pour implémenter JPA INTI- FORMATION 25
JPA Une entité JPA est, par définition, une classe Java qui doit avoir les propriétés suivantes : Ø �Un constructeur vide, public ou protected. Ø � Elle ne doit pas être final, et aucune de ses méthodes ne peut être final. Ø � Une entité JPA ne peut pas être une interface ou une énumération. �Une entité JPA peut être une classe concrête ou abstraite. Les deux principales annotations que l'on peut mettre sur la déclaration d'uneclasse sont @Entity et @T able INTI- FORMATION 26
JPA Configuration du mapping JPA via annotations Le mapping de JPA se configure génralement en insérant quelques annotations JAVA dans le code JAVA des entités. • L'annotation @Entity nous indique cette classe est une classe persistante. Elle peut prendre un attribut name, qui fixe le nom de cette entité. Par défaut, le nom d'une entité est le nom complet de sa classe. • Une classe annotée @Entity est dite "persistante" : ses champs sont enregistrés enbase dans une table associée à la classe. • Une classe non annotée est dite "transiente" : ses champs ne sont pas enregistrés en base. • �L'annotation @Table permet de fixer le nom de la table dans laquelle les instances de cette classe vont être écrites. INTI- FORMATION 27
JPA Configuration du mapping JPA via annotations Annotation @Column: elle expose les attributs optionnels: name, length, nullable, insertable, updatable Annotation @Temporal: Pour préciser le type SQL temporel avec lequel on veut stocker ces champs. Cette annotation prend un unique attribut, qui peut prendre les valeurs Temporal. Type. DATE, Temporal. Type. TIME ou Temporal. Type. TIMESTAMP. Annotation @Lob : Cette annotation permet de forcer l'application decette colonne dans un blob SQL. pour les données byte ( generalement pour les images) Annotation @Transient : Demander de ne pas tenir compte du champ lors du mapping INTI- FORMATION 28
JPA Entity Manager et son contexte de persistance Un objet persistant (@Entity avec toutes ces annotations) doit être pris en charge par un gestionnaire d'objets persistants (implicitement associé à un "contexte de persistance") de façon à ce que la liaison avec la base de données soit bien gérée. • L'interface prédéfinie "Entity. Manager". Celle-ci comporte tout un tas de méthodes fondamentales permettant de déclencher/contrôler des opérations classiques de persistance (recherches, mises à jour , suppressions , . . . ) INTI- FORMATION 29
package javax. persistence; /*Interface used to interact with the persistence context. */ public interface Entity. Manager { public void persist(Object entity); /* Make an instance managed and persistent. */ public <T> T merge(T entity); /* Merge the state of the given entity into the current persistence context. */ public void remove(Object entity); /* Remove the entity instance. */ public <T> T find(Class<T> entity. Class, Object primary. Key); /* Find by primary key. */ public <T> T get. Reference(Class<T> entity. Class, Object primary. Key); /* Get an instance, whose state may be lazily fetched. */ public void flush(); /* Synchronize the persistence context to the underlying database. */ public void set. Flush. Mode(Flush. Mode. Type flush. Mode); public Flush. Mode. Type get. Flush. Mode(); public void lock(Object entity, Lock. Mode. Type lock. Mode); /* Set the lock mode for an entity object contained in the persistence context. */ public void refresh(Object entity); /* Refresh the state of the instance from the database */ public void clear(); /* Clear the persistence context */ public boolean contains(Object entity); /* Check if the instance belongs to the current persistence context*/ public Query create. Query(String ql. String); /* Create an instance of Query for executing a JPQL statement */ public Query create. Named. Query(String name); /* in JPQL or native SQL */ public Query create. Native. Query(String sql. String); public Query create. Native. Query(String sql. String, Class result. Class); public Query create. Native. Query(String sql. String, String result. Set. Mapping); public void join. Transaction(); /* join JTA active transaction */ public Object get. Delegate(); /* implementation specific underlying provider */ public void close(); /* Close an application-managed Entity. Manager */ public boolean is. Open(); public Entity. Transaction get. Transaction(); INTI-Formation 30
JPA Contexte de persistance Un contexte de persistance (associé à Entity. Manager) peut: ● soit être créé et géré par le conteneur (ex: EJB , éventuellement WEB) puis injecté via l'annotation "@Persistence. Context" ou bien récupéré via un lookup JNDI. ● soit être explicitement créé via create. Entity. Manager() de Entity. Manager. Factory(). Son cycle de vie est alors à gérer (==>. close() à explicitement appeler) INTI- FORMATION 31
JPA Opérations sur les entités Opération PERSIST : Cette opération a pour effet de rendre une entité persistante. Si cette entité est déjà persistante, alors cette opération n'a aucun effet. Rendre une entité persistante consiste à l'écrire en base sur le prochain commit de la transaction dans laquelle on se trouve. �Opération REMOVE : L'opération REMOVE a pour effet de rendre une entité non persistante. Si cette entité est déjà non persistante, alors cette opération n'a aucun effet. Une entité rendue non persistante sera effacée de la base sur le prochain commit de la transaction dans laquelle on se trouve. �Opération REFRESH : L'opération REFRESH ne s'applique qu'aux entités persistantes. Si l'entité passée en paramètre n'est pas persistante, alors une exception de type Illegal. Argument. Exception est générée. L'opération REFRESH a pour effet de synchroniser l'état d'une entité avec son état en base. Si les champs d'une entité ont été modifiés dans la transaction courante, ces modifications seront donc effacées par cette opération. Si l'entité a été modifiée en base, alors ces modifiations seront prises en compte lors d'un REFRESH. � INTI- FORMATION 32
JPA Entity Manager et son contexte de persistance Opération DETACH : Une opération DETACH sur une entité persistante a pour effet de la détacher de l' entity manager qui la gère. Cette entité persistante ne sera donc pas prise en compte lors du prochain commit de la transaction dans laquelle on se trouve. �Opération MERGE : Une opération MERGE sur une entité persistante attache cette entité à l' entity manager courant. On utilise cette opération pour associer une entité à un autre entity manager que celui qui a été utilisé pour la créer ou la lire. INTI- FORMATION 33
JPA JPQL TP-1 INTI- FORMATION 34
JPA API CRETERIA TP-2 INTI- FORMATION 35
JPA Quelques autres apports de JPA 2 • JPA 1 était simplement capable de gérer une relation 1 -n (vers des entités) en la définissant (viamapped. By=". . . " ) comme la relation inverse d'une relation n-1. • Autrement dit , la spécification de la colonne clef étrangère devait absolument être effectuée du coté "n-1" (via @Join. Column à coté de @Many. To. One) et le lien devait donc être : – soit unidirectionnel (que du coté n-1 / @Many. To. One) – soit bidirectionnel • Depuis JPA 2 , il est maintenant possible d'établir un lien 1 -n (unidirectionnel sans lien inverse n-1)en spécifiant la clef étrangère du coté 1 -n (@Join. Column proche de @One. To. Many). • Bien que possible, cette nouvelle fonctionnalité ne devrait idéalement être utilisée que pour établir un lien unidirectionnel 1 -n entre une entité d'un package et des entités d'un autre package métier/fonctionnel. • Entre deux types d'entités d'un même package les liaisons bidirectionnelles ne posent AUucun problème INTI- FORMATION 36
Hibernate INTI- FORMATION
JPA Sommaire • • • Présentation d’hibernate Atouts d’hibernate Configuration d’Hibernate Architecture HIBERNATE HPQL INTI- FORMATION 38
HIBERNATE Présentation d’hibernate • • • Hibernate est un logiciel, écrit en java, qui permet de faire le mapping entre Objets Java et Objets stockés en base relationnelle. Hibernate propose son propre langage d’interrogation HQL et a largement inspiré les concepteurs de l’API JPA. Hibernate 2. 1. 3 possède les fonctionnalités d’annuaire JNDI d’enregistrement et localisation des objets, la gestion des transactions. Hibernate a été écrit sous la responsabilité de Gavin King qui fait partie de l’équipe JBoss. Cette technologie de mapping objet/relationnel utilise intensément l'introspection du langage Java(java. lang. reflect) de façon à automatiser une grande partie des mécanismes. Nécessitant assez peu de paramétrage , hibernate se met en œuvre assez facilement. Hibernate gère très bien les transactions (en mode JDBC, JTA ou bien CMT [Container. Managed Transaction - mode déclaratif ] ). Bien que souvent utilisé en mode "3 -tiers" derrière des EJB "session" ou Spring, hibernate peut très bien être directement intégré au sein d'une application autonome (SWING , . . . ) ou bien dans une application WEB (Tomcat sans EJB , Tomcat/Struts, . . . ). • INTI- FORMATION 39
Hibernate Atouts d’hibernate • Les objets persistants d'hibernate sont de simples "Java. Bean" (POJO) souvent sérialisables. • L'un des principaux atouts d'hibernate est de pouvoir : 1) récupérer un objet persistant suite à une requête (SQL , . . . ) 2) détacher cet objet du contexte de persistance (via certains automatismes) 2) transférer (éventuellement tel quel) cet objet vers le tiers "WEB" pour l'afficher ou bien en afficher une copie (via une page JSP par exemple) Site web de référence: www. hibernate. org INTI- FORMATION 40
HIBERNATE Installation (Tomcat , JBoss) Ø Hibernate étant déjà intégré au sein de JBoss , il n'y a rien à ajouter. Ø Si l'on souhaite utiliser Hibernate au sein de Tomcat, il faudra: • télé-charger le produit (ZIP) et extraire le contenu de l'archive ==> répertoires Xxx et Xxx/lib. • recopier hibernate 3. jar au sein du répertoire common/lib de Tomcat • recopier tout un tas d'archives secondaires au sein du répertoire WEBINF/lib de l'application WEB : Ø Une configuration maven (pom. xml) peut être utile et efficace pour gérer les dépendances d'application de façon à ce que hibernate puisse s'appuyer dessus. Ø D'autre part, il est souvent nécessaire de configurer un pool de connexions au sein du serveur d'application de façon à ce que hibernate puisse s'appuyer dessus. INTI- FORMATION 41
Hibernate Architecture INTI- FORMATION 42
HIBERNATE Principaux objets de l'API Session. Factory Un objet de ce type par base de données. cet objet représente un cache de tous les mappings "objet/relationnel" liés à une certaine base de données. Les traitements associés à cet objet sont ré-entrants (multi-threadingpossible). Cet objet sert à fabriquer des objets "Session" Session Un objet de ce type représente une session utilisateur et est lié à un seul thread. Une session englobe un certain nombre d'objets persistants dont les valeurs sont mappées avec le contenu de certaines tables relationnelles. Chaque objet session incorpore une connexion JDBC et sert à récupérer ou fabriquer des objets de type "Transaction Un objet de l'api hibernate représentant une transaction que l'on peutexplicitement délimiter ( begin , commit/rollback). cet objet se base sur des transactions sous-jacentes de type JDBC, JTA ou. . . Objets persistants Objets java (Java. Bean / POJO) comportant des valeurs persistantes et des traitements "métier". Tant qu'ils sont liés à une session, ces objets ont des valeurs synchronisées/synchronisables avec la base de données. Dès que la session est fermée, ces objets deviennent détachés et peuvent être directement réutilisés pour tout transfert ou affichage. INTI- FORMATION 43
HIBERNATE Fichiers de configuration (selon variantes) INTI- FORMATION 44
HIBERNATE Structure ordinaire du code de l'application allant autour d'Hibernate: INTI- FORMATION 45
JPA Architecture HIBERNATE • Entity. Manager. F actory Ceci est une classe d'usine de Entity. Manager. Il crée et gère de multiples instances de Entity. Manager. • �Entity. Manager Il est une interface, il gère les opérations de persistance des objets. Il fonctionne comme usine de requêtes. • �Entity les entities sont les objets de la persistance, stockées sous forme d'enregistrements dans la base de données. • �Entity. T ransaction Il a relation one-to-one avec Entity. Manager. Pour chaque Entity. Manager, les opérations sont maintenues par classe Entity. Transaction. • �Persistance Cette classe contient des méthodes statiques pour obtenir par exemple Entity. Manager. Factory. • �Query Cette interface est implémentée par chaque fournisseur JPA pour obtenir des objets relationnels qui répondent aux queries INTI- FORMATION 46
HIBERNATE Configuration Hibernate en xml (sans JPA) Configuration cfg = new Configuration(); cfg. configure(); // prend en compte hibernate. cfg. xml /* ou bien */ cfg. configure("hibernate. cfg 2. xml"); Session. Factory sf = cfg. build. Session. Factory(); Cet objet de configuration cfg est automatiquement initialisé avec un jeu de propriétés (hibernate. properties) ou bien via un fichier de configuration xml (hibernate. cfg. xml) à placer dansle CLASSPATH. Exemple de fichier hibernate. cfg. xml (avec datasource) NB: La propriété connection. datasource doit avoir une valeur du type " java: comp/env/jdbc/xxx. DS " avec Tomcat et une valeur du type "java: xxx. Ds" avec JBoss 47 INTI- FORMATION
JPA Configuration Hibernate en xml (sans JPA) Dans le cas où l'on préfère laisser à hibernate le soin de gérer le pool de connexions JDBC lui même, les propriétés à renseigner (à la place de hibernate. connection. datasource) sont les suivantes: A chaque classe d'objet persistant doit correspondre un fichier xml de mapping. Un fichier de mapping hibernate a classiquement l'extension ". hbm. xml" ; il doit être placé dans le CLASSPATH (comme un fichier de ressource) et doit être référencé depuis le fichier de configuration principal "hibernate. cfg. xml" (via une balise <mapping> ). INTI- FORMATION 48
JPA HPQL • Pour offrir un langage d’interrogation commun à toutes les bases de données, Hibernate propose son propre langage nommé HQL (Hibernate Query Language). • Le langage HQL est proche de SQL avec une utilisation sous forme d’objets des noms de certaines entités. • Il n’y a aucune référence aux tables ou aux champs car ceux-ci sont référencés respectivement par leur classe et leurs propriétés. • C’est Hibernate qui se charge de générer la requête SQL à partir de la requête HQL en tenant compte du contexte. • C’est-à-dire le type de base de données utilisée et défini dans le fichier de configuration et la configuration du mapping. • La méthode find() de la classe Session permet d’effectuer une recherche d’occurrences grâce à la requête fournie en paramètre. • La méthode find() possède deux surcharges pour permettre de fournir un seul ou plusieurs paramètres dans la requête. • La première surcharge permet de fournir un seul paramètre : elle attend en paramètre la requête, la valeur du paramètre et le type du paramètre INTI- FORMATION 49
TP-1 INTI- FORMATION 50
- Slides: 50