IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

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.

SommaireLes fichiers de mapping (8)
précédent sommaire suivant
 

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.

Mis à jour le 22 octobre 2006 Baptiste Wicht

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.

Mis à jour le 22 octobre 2006 Baptiste Wicht

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.

Mis à jour le 11 février 2008 Baptiste Wicht

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 ... />

Mis à jour le 11 février 2008 Baptiste Wicht

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; 
	} 
        [...] 
}

Mis à jour le 17 mars 2014 raf64flo

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 ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les 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.