FAQ HibernateConsultez toutes les FAQ
Nombre d'auteurs : 5, nombre de questions : 63, dernière mise à jour : 17 mars 2014 Ajouter une question
Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de http://www.developpez.com et de l'expérience personnelle des auteurs.
Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci.
- 4.1. La génération (3)
Un fichier de mapping est tout simplement un fichier XML qui va permettre à Hibernate de faire le lien entre vos objets Java et la base de données.
Voici sa structure la plus basique :
Code xml : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 | <?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> <class name="NomDeLaClasse" table="NOMDELATABLE"> </class> </hibernate-mapping> |
La seule chose que nous lui disons pour le moment est quelle classe (un simple javaBean) correspond à quelle table.
Le nom de ces fichiers doit se terminer par .hbm.xml pour qu'Hibernate sache que c'est un fichier de mapping. De plus, par convention, on écrit un fichier de mapping par classe de persistance.
Pour ajouter une propriété à un de vos objets, il vous faut modifier le fichier de mapping de cet objet.
L'ajout d'une propriété est très simple, il vous suffit d'ajouter une ligne comme celle-ci :
Code xml : | Sélectionner tout |
<property name="nomDeLaVariable" type="typeDeLaValeur" column="ColonneOuTrouverCetteValeur"/>
Comme vous le voyez, c'est très simple, il vous faut juste associer le nom de la variable du Javabean au nom de la colonne de la base de données.
Comme il est conseillé de bien séparer la couche de persistance de la couche métier, vos classes de persistance, seront de simples classes avec des getters et des setters, des Javabeans. Il faudrait éviter d'implémenter des opérations métiers dans ces classes, mais cette restriction est très relative et plusieurs opinions existent sur le sujet. L'important étant que vous sépariez correctement les couches de votre application.
Voici un simple exemple d'une de ces classes :
Code java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public class OdActeur { private String nom = null; private String prenom = null; public String getNom(){ return nom; } public void setNom(String nom){ this.nom = nom; } public String getPrenom(){ return prenom; } public void setPrenom(String prenom){ this.prenom = prenom; } } |
Il faut faire très attention à la casse des variables et de leurs getters/setters. Un nom de variable commence par une minuscule et le nom de son getter est formé de get suivi du nom de la variable avec la première lettre en majuscule. Si vous ne respectez pas cette casse, Hibernate ne va pas trouver vos propriétés et ne pourra donc pas fonctionner correctement.
La réponse est oui. Effectivement, Hibernate permet de mapper les classes qui n'ont pas de clé primaire.
Lorsqu'une table n'a pas de clé primaire, le tag <generator .. > à l'intérieur du tag <id .....> </id> n'est pas indispensable car par defaut, il est à "assigned". Mais le tag <id .....> </id> est obligatoire car Hibernate se sert de ce tag pour rechercher (loader) vos objets. Dans vos fichiers de mapping, vous devez avoir ceci :
Code xml : | Sélectionner tout |
1 2 3 4 5 6 7 8 | <id column="nomColumn" name="unNom" type="LeType" > <generator class="assigned" /> </id> <property ... /> |
Ou ceci :
Code xml : | Sélectionner tout |
1 2 3 4 5 6 7 | <id column="nomColumn" name="unNom" type="LeType" > </id> <property ... /> |
Hibernate dispose de trois types de mapping gérés nativement : "yes_no", "true_false" et "boolean". Le premier permet de mapper une ligne de la base de données contenant "Y" ou "N", le second, "T" ou "F".
Exemple avec yes_no : pour un attribut nommé "is_public" de la table "logic_data" de la base de données, voici la correspondance du fichier de mapping (hbm.xml) :
Code xml : | Sélectionner tout |
1 2 3 4 5 6 7 8 | <hibernate-mapping> <class name="com.mycompany.mypackage.LogicData" table="logic_data"> <property name="isPublic" type="yes_no"> <column name="is_public" /> </property> [...] </class> </hibernate-mapping> |
Et voici le code de la classe correspondante :
Code java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 | public class LogicData implements java.io.Serializable { private Boolean isPublic; [...] public Boolean getIsPublic() { return this.isPublic; } public void setIsPublic(Boolean isPublic) { this.isPublic = isPublic; } [...] } |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.