Documentation de référence d'hibernate - PDF

Description
HIBERNATE - Persistance relationnelle en Java standard 1 Documentation de référence d'hibernate GA par Gavin King, Christian Bauer, Max Rydahl Andersen, Emmanuel Bernard, et Steve Ebersole and thanks

Please download to get full document.

View again

of 20
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Information
Category:

Home & Garden

Publish on:

Views: 37 | Pages: 20

Extension: PDF | Download: 0

Share
Transcript
HIBERNATE - Persistance relationnelle en Java standard 1 Documentation de référence d'hibernate GA par Gavin King, Christian Bauer, Max Rydahl Andersen, Emmanuel Bernard, et Steve Ebersole and thanks to James Cobb (Graphic Design), Cheyenne Weaver (Graphic Design), Vincent Ricard, Sebastien Cesbron, Michael Courcy, Vincent Giguère, Baptiste Mathus, Emmanuel Bernard, et Anthony Patricio Préface... xi 1. Feedback... xii 1. Tutorial Partie 1 - Première application Hibernate Setup La première classe Le fichier de mapping Configuration d'hibernate Building with Maven Démarrage et aides Charger et stocker des objets Partie 2 - Mapper des associations Mapper la classe Person Une association unidirectionnelle basée sur Set Travailler avec l'association Collection de valeurs Associations bidirectionnelles Travailler avec des liens bidirectionnels Part 3 - L'application web EventManager Ecrire la servlet de base Procéder et rendre Déployer et tester Résumé Architecture Généralités Etats des instances Intégration JMX Support JCA Contextual sessions Configuration Configuration par programmation Obtenir une SessionFactory Connexions JDBC Propriétés de configuration optionnelles Dialectes SQL Chargement par Jointure Ouverte Flux binaires Cache de second niveau et cache de requêtes Substitution dans le langage de requêtage Statistiques Hibernate Tracer Implémenter une NamingStrategy Fichier de configuration XML Intégration à un serveur d'application J2EE iii HIBERNATE - Persistance relat Configuration de la stratégie transactionnelle SessionFactory associée au JNDI Association automatique de la Session à JTA Déploiement JMX Classes persistantes Un exemple simple de POJO Implémenter un constructeur sans argument Fournir une propriété d'indentifiant (optionnel) Favoriser les classes non finales (optionnel) Déclarer les accesseurs et mutateurs des attributs persistants (optionnel) Implémenter l'héritage Implémenter equals() et hashcode() Modèles dynamiques Tuplizers EntityNameResolvers Mapping O/R basique Déclaration de Mapping Doctype Hibernate-mapping Class id Enhanced identifier generators Identifier generator optimization composite-id Discriminator Version (optional) Timestamp (optional) Property Many-to-one One-to-one Natural-id Component and dynamic-component Properties Subclass Joined-subclass Union-subclass Join Key Column and formula elements Import Any Hibernate types Entités et valeurs Basic value types iv Types de valeur définis par l'utilisateur Mapper une classe plus d'une fois SQL quoted identifiers alternatives Metadata utilisation de XDoclet Utilisation des annotations JDK Generated properties Auxiliary database objects Collection mapping Collections persistantes Mapper une collection Les clefs étrangères d'une collection Les éléments d'une collection Collections indexées Collections de valeurs et associations plusieurs-vers-plusieurs Association un-vers-plusieurs Mappings de collection avancés Collections triées Associations bidirectionnelles Associations bidirectionnelles avec des collections indexées Associations ternaires Utiliser un idbag Exemples de collections Mapper les associations Introduction Association unidirectionnelle Many-to-one One-to-one One-to-many Associations unidirectionnelles avec tables de jointure One-to-many Many-to-one One-to-one Many-to-many Associations bidirectionnelles one-to-many / many-to-one One-to-one Associations bidirectionnelles avec table de jointure one-to-many / many-to-one one to one Many-to-many Des mappings plus complexes Mapping de composants Objects dépendants v HIBERNATE - Persistance relat Collection d'objets dépendants Utiliser les composants comme index de map Utiliser un composant comme identifiant Composant Dynamique Inheritance mapping The three strategies Une table par hiérarchie de classe Une table par classe fille Table per subclass: using a discriminator Mélange d'une table par hiérarchie de classe avec une table par classe fille Une table par classe concrète Table per concrete class using implicit polymorphism Mélange du polymorphisme implicite avec d'autres mappings d'héritage Limitations Travailler avec des objets États des objets Hibernate Rendre des objets persistants Chargement d'un objet Requêtage Exécution de requêtes Filtrer des collections Requêtes Criteria Requêtes en SQL natif Modifier des objets persistants Modifier des objets détachés Détection automatique d'un état Suppression d'objets persistants Réplication d'objets entre deux entrepôts de données Flush de la session Persistance transitive Utilisation des méta-données Transactions and Concurrency Gestion de session et délimitation de transactions Unité de travail Longue conversation L'identité des objets Problèmes communs Démarcation des transactions Environnement non managé Utilisation de JTA Gestion des exceptions Timeout de transaction Contrôle de consurrence optimiste vi Gestion du versionnage au niveau applicatif Les sessions longues et le versionnage automatique Les objets détachés et le versionnage automatique Personnaliser le versionnage automatique Pessimistic locking Connection release modes Les intercepteurs et les événements Intercepteurs Système d'événements Sécurité déclarative d'hibernate Traitement par paquet Paquet de mises à jour L'interface StatelessSession Notez que dans le code de l'exemple, les intances de Customer retournã es par la requãªte sont immã diatement dã tachã es. Elles ne sont jamais associã es à un contexte de persistance La pseudo-syntaxe pour les expressions UPDATE et DELETE est : ( UPDATE DELETE ) FROM? EntityName (WHERE where_conditions)?. Certains points sont à noter : HQL: Langage de requêtage d'hibernate Sensibilité à la casse La clause from Associations et jointures Formes de syntaxes pour les jointures Referring to identifier property La clause select Fonctions d'aggrégation Requêtes polymorphiques La clause where Expressions La clause order by La clause group by Sous-requêtes Exemples HQL Mise à jour et suppression Trucs & Astuces translator-credits Row value constructor syntax Requêtes par critères Créer une instance de Criteria Restriction du résultat Trier les résultats Associations Peuplement d'associations de manière dynamique vii HIBERNATE - Persistance relat Requêtes par l'exemple Projections, agrégation et regroupement Requêtes et sous-requêtes détachées Requêtes par identifiant naturel SQL natif Utiliser une SQLQuery Scalar queries Entity queries Handling associations and collections Returning multiple entities Returning non-managed entities Handling inheritance Parameters Requêtes SQL nommées Utilisation de return-property pour spécifier explicitement les noms des colonnes/alias Utilisation de procédures stockées pour les requêtes SQL personnalisé pour créer, mettre à jour et effacer SQL personnalisé pour le chargement Filtrer les données Filtres Hibernate Mapping XML Travailler avec des données XML Spécifier le mapping XML et le mapping d'une classe ensemble Spécifier seulement un mapping XML Métadonnées du mapping XML Manipuler des données XML Améliorer les performances Stratégies de chargement Travailler avec des associations chargées tardivement Personnalisation des stratégies de chargement Proxys pour des associations vers un seul objet Initialisation des collections et des proxys Utiliser le chargement par lot Utilisation du chargement par sous select Utiliser le chargement tardif des propriétés Le cache de second niveau Mapping de Cache Strategie : lecture seule Stratégie : lecture/écriture Stratégie : lecture/écriture non stricte Stratégie : transactionelle Cache-provider/concurrency-strategy compatibility Gérer les caches viii 19.4. Le cache de requêtes Comprendre les performances des Collections Classification Les lists, les maps, les idbags et les sets sont les collections les plus efficaces pour la mise à jour Les Bags et les lists sont les plus efficaces pour les collections inverse Suppression en un coup Moniteur de performance Suivi d'une SessionFactory Métriques Guide des outils Génération automatique du schéma Personnaliser le schéma Exécuter l'outil Propriétés Utiliser Ant Mises à jour incrémentales du schéma Utiliser Ant pour des mises à jour de schéma par incrément Validation du schéma Utiliser Ant pour la validation du Schéma Exemple : Père/Fils Une note à propos des collections un-vers-plusieurs bidirectionnel Cycle de vie en cascade Cascades et unsaved-value Conclusion Exemple : application Weblog Classes persistantes Mappings Hibernate Code Hibernate Exemple : quelques mappings Employeur/Employé (Employer/Employee) Auteur/Travail (Author/Work) Client/Commande/Produit (Customer/Order/Product) Divers mappings d'exemple Typed one-to-one association Exemple de clef composée Many-to-many avec une clef composée partagée Contenu basé sur une discrimination Associations sur des clefs alternées Meilleures pratiques Database Portability Considerations Portability Basics Dialect ix HIBERNATE - Persistance relat Dialect resolution Identifier generation Database functions Type mappings References x Préface Working with object-oriented software and a relational database can be cumbersome and time consuming in today's enterprise environments. Hibernate is an Object/Relational Mapping tool for Java environments. The term Object/Relational Mapping (ORM) refers to the technique of mapping a data representation from an object model to a relational data model with a SQL-based schema. Hibernate not only takes care of the mapping from Java classes to database tables (and from Java data types to SQL data types), but also provides data query and retrieval facilities. It can also significantly reduce development time otherwise spent with manual data handling in SQL and JDBC. Hibernate's goal is to relieve the developer from 95 percent of common data persistence related programming tasks. Hibernate may not be the best solution for data-centric applications that only use stored-procedures to implement the business logic in the database, it is most useful with object-oriented domain models and business logic in the Java-based middle-tier. However, Hibernate can certainly help you to remove or encapsulate vendor-specific SQL code and will help with the common task of result set translation from a tabular representation to a graph of objects. Si vous êtes nouveau dans Hibernate et le mapping Objet/Relationnel voire même en Java, suivez ces quelques étapes : 1. Lisez Chapitre 1, Tutorial pour un didacticiel plus long avec plus d'instructions étape par étape. 2. Lisez Chapitre 2, Architecture pour comprendre les environnements dans lesquels Hibernate peut être utilisé. 3. View the eg/ directory in the Hibernate distribution. It contains a simple standalone application. Copy your JDBC driver to the lib/ directory and edit etc/hibernate.properties, specifying correct values for your database. From a command prompt in the distribution directory, type ant eg (using Ant), or under Windows, type build eg. 4. Use this reference documentation as your primary source of information. Consider reading [JPwH] if you need more help with application design, or if you prefer a step-by-step tutorial. Also visit and download the example application from [JPwH]. 5. Les questions les plus fréquemment posées (FAQs) trouvent leur réponse sur le site web Hibernate. 6. Links to third party demos, examples, and tutorials are maintained on the Hibernate website. 7. La zone communautaire (Community Area) du site web Hibernate est une bonne source d'information sur les design patterns et sur différentes solutions d'intégration d'hibernate (Tomcat, JBoss, Spring Framework, Struts, EJB, etc). If you have questions, use the user forum linked on the Hibernate website. We also provide a JIRA issue tracking system for bug reports and feature requests. If you are interested in the xi Préface development of Hibernate, join the developer mailing list. If you are interested in translating this documentation into your language, contact us on the developer mailing list. Le développement commercial, le support de production et les formations à Hibernate sont proposés par JBoss Inc (voir Hibernate est un projet Open Source professionnel et un composant critique de la suite de produits JBoss Enterprise Middleware System (JEMS). 1. Feedback Use Hibernate JIRA [http://opensource.atlassian.com/projects/hibernate] to report errors or request enhacements to this documentation. xii Chapitre 1. Tutorial Intended for new users, this chapter provides an step-by-step introduction to Hibernate, starting with a simple application using an in-memory database. The tutorial is based on an earlier tutorial developed by Michael Gloegl. All code is contained in the tutorials/web directory of the project source. Important This tutorial expects the user have knowledge of both Java and SQL. If you have a limited knowledge of JAVA or SQL, it is advised that you start with a good introduction to that technology prior to attempting to learn Hibernate. Note The distribution contains another example application under the tutorial/eg project source directory Partie 1 - Première application Hibernate For this example, we will set up a small database application that can store events we want to attend and information about the host(s) of these events. Note Although you can use whatever database you feel comfortable using, we will use HSQLDB [http://hsqldb.org/] (an in-memory, Java database) to avoid describing installation/setup of any particular database servers Setup The first thing we need to do is to set up the development environment. We will be using the standard layout advocated by alot of build tools such as Maven [http://maven.org]. Maven, in particular, has a good resource describing this layout [http://maven.apache.org/guides/ introduction/introduction-to-the-standard-directory-layout.html]. As this tutorial is to be a web application, we will be creating and making use of src/main/java, src/main/resources and src/main/webapp directories. We will be using Maven in this tutorial, taking advantage of its transitive dependency management capabilities as well as the ability of many IDEs to automatically set up a project for us based on the maven descriptor. 1 Chapitre 1. Tutorial project xmlns= http://maven.apache.org/pom/4.0.0 xmlns:xsi= http://www.w3.org/2001/xmlschema-instance xsi:schemalocation= http://maven.apache.org/pom/ maven xsd modelversion 4.0.0 /modelversion groupid org.hibernate.tutorials /groupid artifactid hibernate-tutorial /artifactid version 1.0.0-snapshot /version name first Hibernate Tutorial /name build !-- we dont want the version to be part of the generated war file name -- finalname ${artifactid /finalname /build dependencies dependency groupid org.hibernate /groupid artifactid hibernate-core /artifactid /dependency !-- Because this is a web app, we also have a dependency on the servlet api. -- dependency groupid javax.servlet /groupid artifactid servlet-api /artifactid /dependency !-- Hibernate uses slf4j for logging, for our purposes here use the simple backend -- dependency groupid org.slf4j /groupid artifactid slf4j-simple /artifactid /dependency !-- Hibernate gives you a choice of bytecode providers between cglib and javassist -- dependency groupid javassist /groupid artifactid javassist /artifactid /dependency /dependencies /project 2 La première classe Astuce It is not a requirement to use Maven. If you wish to use something else to build this tutoial (such as Ant), the layout will remain the same. The only change is that you will need to manually account for all the needed dependencies. If you use something like Ivy [http://ant.apache.org/ivy/] providing transitive dependency management you would still use the dependencies mentioned below. Otherwise, you'd need to grab all dependencies, both explicit and transitive, and add them to the project's classpath. If working from the Hibernate distribution bundle, this would mean hibernate3.jar, all artifacts in the lib/required directory and all files from either the lib/bytecode/cglib or lib/bytecode/javassist directory; additionally you will need both the servlet-api jar and one of the slf4j logging backends. Save this file as pom.xml in the project root directory La première classe Next, we create a class that represents the event we want to store in the database; it is a simple JavaBean class with some properties: package org.hibernate.tutorial.domain; import java.util.date; public class Event { private Long id; private String title; private Date date; public Event() { public Long getid() { return id; private void setid(long id) { this.id = id; public Date getdate() { return date; 3 Chapitre 1. Tutorial public void setdate(date date) { this.date = date; public String gettitle() { return title; public void settitle(string title) { this.title = title; This class uses standard JavaBean naming conventions for property getter and setter methods, as well as private visibility for the fields. Although this is the recommended design, it is not required. Hibernate can also access fields directly, the benefit of accessor methods is robustness for refactoring. The id property holds a unique identifier value for a particular event. All persistent entity classes (there are less important dependent classes as well) will need such an identifier property if we want to use the full feature set of Hibernate. In fact, most applications, especially web applications, need to distinguish objects by identifier, so you should consider this a feature rather than a limitation. However, we usually do not manipulate the identity of an object, hence the setter method should be private. Only Hibernate will assign identifiers when an object is saved. Hibernate can access public, private, and protected accessor methods, as well as public, private and protected fields directly. The choice is up to you and you can match it to fit your application design. The no-argument constructor is a requirement for all persistent classes; Hibernate has to create objects for you, using Java Reflection. The constructor can be private, however package or public visibility is required for runtime proxy generation and efficient data retrieval without bytecode instrumentation. Save this file to the src/main/java/org/hibernate/tutorial/domain directory Le fichier de mapping Hibernate a besoin de savoir comment charger et stocker des objets d'une classe persistante. C'est là qu'intervient le fichier de mapping Hibernate. Le fichier de mapping indique à Hibernate à quelle table dans la base de données il doit accéder, et quelles colonnes de cette table il devra utiliser. La structure basique de ce fichier de mapping ressemble à ça : 4 Le fichier de mapping ?xml version= 1.0 ? !DOCTYPE hibernate-mapping PUBLIC -//Hibernate/Hibernate Mapping DTD 3.0//EN http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd hibernate-mapping package= org.hibernate.tutorial.domain [...] /hibernate-mapping Hibernate DTD is sophisticated. You can use it for auto-completion of XML mapping elements and attributes in your editor or IDE. Opening up the DTD file in your text editor is the easiest way to get an overview of all elements and attributes, and to view the defaults, as well as some comments. Hibernate will not load the DTD file from the web, but first look it up from the classpath of the application. The DTD file is included in hibernate-core.jar (it is also included in the hibernate3.jar, if using the distribution bundle). Important We will omit the DTD declaration in future examples to shorten the code. It is, of course, not optional. Between the two hibernate-mapping tags, include a class element. All persistent e
Related Search
Similar documents
View more...
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks