Sommaire
Sommaire
<<

Hibernate déclarer entité XML  il y a 5 années

Auteur

Hachim IDRISSI YASSINE, de ProfLibre.

Série

HIBERNATE : l’essentiel

Description

L’objectif de cette formation est de savoir comment créer une entité Hibernate avec la méthode XML.

Tags

Introduction

L’objectif de cette formation est de savoir comment créer une entité Hibernate avec du XML.

I. Prérequis

Ayant consulté les deux formations précédentes dans la même série : https://www.proflibre.com/?serie=55

[Hibernate] Vue d’ensemble

https://www.proflibre.com/JAVA_:_HIBERNATE/%5BHibernate%5D_Vue_d%E2%80%99ensemble/1

Hibernate Native : configurer

https://www.proflibre.com/JAVA_:_HIBERNATE/Hibernate_Native_:_configurer/2

II. Diagramme de classes

Diagramme de classes « UML » :

Personne
- id : Long
- nom : String
- prenom : String
- biographie : String
- age : int
- poids : Double
- compte : BigDecimal
- dateMariage : Date
- dateInsertion : Timestamp
+ Getters & Setters

III. La classe JAVA "Personne.java"

package com.proflibre.xml;

import java.math.BigDecimal;
import java.sql.Date;
import java.sql.Timestamp;

public class Personne {
	
    private Long id;
	private String nom;
	private String prenom;
	private String biographie;
	private int age;
	private Double poids;
	private BigDecimal compte;
    private Date dateMariage;
    private Timestamp dateInsertion;
    
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	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;
	}
	public String getBiographie() {
		return biographie;
	}
	public void setBiographie(String biographie) {
		this.biographie = biographie;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Double getPoids() {
		return poids;
	}
	public void setPoids(Double poids) {
		this.poids = poids;
	}
	public BigDecimal getCompte() {
		return compte;
	}
	public void setCompte(BigDecimal compte) {
		this.compte = compte;
	}
	public Date getDateMariage() {
		return dateMariage;
	}
	public void setDateMariage(Date dateMariage) {
		this.dateMariage = dateMariage;
	}
	public Timestamp getDateInsertion() {
		return dateInsertion;
	}
	public void setDateInsertion(Timestamp dateInsertion) {
		this.dateInsertion = dateInsertion;
	}
	
	@Override
	public String toString() {
		return "Personne [id=" + id + ", nom=" + nom + ", prenom=" + prenom + ", biographie=" + biographie + ", age="
				+ age + ", poids=" + poids + ", compte=" + compte + ", dateMariage=" + dateMariage + ", dateInsertion="
				+ dateInsertion + "]";
	}
	
}

IV. Schéma relationnel

Schéma relationnel « MLD / MySQL » de la table « Personne » qu’on souhaite générerautomatiquement avec Hibernate :

La table "PERSONNE"

V. Struture minimale du fichier *.hbm.xml

Structure minimale du fichier *.hbm.xml

VI. Choisir le typage

Pour faire la correspondance entre les types Hibernate, JAVA et SGBD (MySQL), rendez-vous sur la documentation officielle (rubrique 2.3. Basic Types) :

https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#basic

Deux déclarations possibles :

1. L’attribut “type” de la balise “property” :

<property name="nom" type="org.hibernate.type.StringType" length="500" />

L’attribut type peut prendre comme valeur le :

Ø Nom d’un type Hibernate : Hibernate type (org.hibernate.type package), exemple : org.hibernate.type.StringType

Ø Nom d'une classe Java : Java type, exemple : java.lang.String

Ø Nom d'un type basique Hibernate : BasicTypeRegistry key(s), exemples : string.

2. L’attribut “sql-type” de la balise “column” :

<property name="dateInsertion" type="timestamp">

<column name="date_insertion" sql-type="TIMESTAMP" />

</property>

L’attribut sql-type peut prendre comme valeur le type du champ dans la base du SGBD, ce qui correspond à la colonne JDBC type de la documentation officielle, exemple : VARCHAR. Pour spécifier la taille de la chaîne, il suffit de rajouter l’attribut length à la balise column.

VII. Remplir la fiche préparatrice

Propriétés JAVA/HibernateTypes JAVATypes HibernateChamps MySQLTypes MySQL
idLonglongpersonne_idbigint
nomStringorg.hibernate.type.StringTypenomvarchar
prenomStringjava.lang.Stringprenomvarchar
biographieStringtextbiographielongtext
ageintintageint
poidsDoubledoublepoidsdouble
compteBigDecimalbig_decimalcomptedecimal
dateMariageDatedatedateMariagedate
dateInsertionTimestamptimestampdate_insertiontimestamp

VIII. La clé primaire

Plusieurs valeurs sont possibles pour l’attribut class de la balise generator :

Ø identity : l'identifiant renvoyé est de type long, short ou int, c’est l’équivalent d’une clé primaire AUTO_INCREMENT pour MySQL.

Ø native : choisit identity, sequence ou hilo selon les possibilités offertes par la base de données sous-jacente, c’est l’équivalent d’une clé primaire AUTO_INCREMENT pour MySQL.

Ø Increment : ne pas utiliser en environnement clusterisé. Ce n’est pas l’équivalent d’une clé primaire AUTO_INCREMENT pour MySQL, l’incrémentation est gérée ici par Hibernate et non par le SGBD.

Ø assigned : laisse l'application affecter un identifiant à l'objet avant que la méthode save() soit appelée. Il s'agit de la stratégie par défaut si aucun <generator> n'est spécifié.

Ø Sequence : utilisation des séquences dans DB2, PostgreSQL, Oracle, SAP DB, McKoi ou d'un générateur dans Interbase. L'identifiant renvoyé est de type long, short ou int. Les séquences sont très utilisées sur Oracle.

Ø

IX. Catalogue des déclarations

Pour plus d’informations sur la structure, visitez les rubriques 5.1.3. class, 5.1.4. id, 5.1.4.1. Generator, 5.1.11. property et 5.1.22. éléments column et formula de l’ancienne documentation officielle pour XML :

https://docs.jboss.org/hibernate/stable/core.old/reference/fr/html/mapping.html

X. DATETIME vs TIMESTAMP

Les types DATETIME et TIMESTAMP sont tous deux utilisés pour les valeurs qui contiennent des parties de date et d'heure. MySQL les récupère et les affiche au format 'YYYY-MM-DD hh:mm:ss' format.

DATETIME est définie dans l’inervalle '1000-01-01 00:00:00’ à '9999-12-31 23:59:59'.

TIMESTAMP est définie dans l’inervalle '1970-01-01 00:00:01' UTC à '2038-01-19 03:14:07' UTC.

MySQL convertit les valeurs TIMESTAMP du fuseau horaire actuel en UTC pour le stockage, et de retour de l'UTC vers le fuseau horaire actuel pour la récupération. (Cela ne se produit pas pour d'autres types tels que DATETIME.) Par défaut, le fuseau horaire actuel pour chaque connexion est l'heure du serveur.

Source : https://dev.mysql.com/doc/refman/8.0/en/datetime.

Ø Créer un champ de type MySQL DATETIME avec Hibernate :

Ø Créer un champ de type MySQL TIMESTAMP avec Hibernate :

XI. La déclaration XML "Personne.hbm.xml"

Personne.hbm.xml

Conclusion

Dans l’étape suivante, nous allons découvrir comment créer la même entité vue dans cette formation avec les annotations.

 

Prise de notes

Vous seul vous pouvez voir vos notes.

Mes notes

Commentaires

 il y a 5 années
Hachim IDRISSI YASSINE [L'auteur] : N’hésitez pas à poser des questions ou nous faire part de vos remarques.
Vos retours nous intéressent.

Formations similaires

Etes-vous intéressé par nos dernières formations ?

back to top
contactez-nous
Fermer