Mathissart Nicolas
Pour déclarée une table assurant la persistance d'un objet, il suffit d'ajouter la ligne de code ci-dessous qui permet de définir le nom de la table.
Il faut mettre la ligne de code au dessus de la classe :
@Table(name="Categorie") // C'est cette ligne qui permet de définir la table public class Categorie { @Id @Column(name="id") @GeneratedValue(strategy=GenerationType.IDENTITY) private int id;
Afin de déclaré un mapping entre une membre de la classe et un champ de la table relationnelle,
il suffit d'ajouter une ligne de code qui permet de définir le nom de notre champ et de définir son type.
voici la ligne de code qu'il vous faut :
@Column(name="libelle") //On indique que notre champ s'appellera Libelle private String libelle; // On indique que notre champ sera un String
@Column(name=“monChamp”)
private monType monChamp
Pour déclarer une clé primaire sur Hibernate, il suffit de r'ajouter la balise “@Id” au-dessus de la colonne concerné. Par exemple :
@Id // C'est cette balise qui permet de définir la clé primaire. @Column(name="id") private int id;
Sur hibernate, il y à plusieurs méthodes pour déclarer les clés primaires.
- Afin d'auto incrémenter à partir de la base donnée une clé primaire, il suffit d'utiliser cette ligne de code ;
@GeneratedValue(strategy=generationType.AUTO)
-
@GeneratedValue(strategy=GenerationType.IDENTITY)
- Afin d'auto incrémenter à partir de Hibernate une clé primaire, il suffit d'utiliser cette ligne de code ;
@GeneratedValue(strategy=GenerationType.SEQUENCE)
-
@GeneratedValue(strategy=GenerationType.TABLE)
Voici un tableau recapitulant, la correspondance de type entre les propriétés d'une classe et les champs d'une table :
Type Java | Type Sql |
---|---|
String | Varchar |
int | Integer |
float | Float |
La méthode persist sur Hibernate permet d'ajouter un élément dans la base de base de données :
Categorie aCategorie=new Categorie("Presse"); // On instancie un produit, donc l'objet que l'on insérera dans la base de donnée session.persist(aCategorie); // Une fois l'objet instancier, on l’insère à la BDD
La méthode commit permet de mettre à jour la base de donnée avec les objets persistants. Autrement dit, la méthode commit permet d’insérer dans la base de donnée les objets qui sont valide.
Code de la méthode commit :
Transaction trans = session.beginTransaction(); trans.commit();
Lors de l'insertion d'un produit et d'une catégorie dans la base de donnée, nous avions indiquer au produit qu'il fera partit de la catégorie “aCatégorie” que nous avons instancier au dessus ( Catégorie : Presse ) .
Produit aProduit=new Produit("Programmez!", 3.0f, aCategorie) //On ne passe pas l'id de la catégorie mais directement la catégorie concerné;
Lors de l'insertion dans la base de donnée, l'iDCategorie (clé étrangère) de notre produit à donc prit comme valeur la clé primaire de la catégorie “aCatégorie”.
Afin de réaliser la persistance, Hibernate à effectuer de requetes sql INSERT ;
Ajout de la catégorie :
INSERT INTO Categorie (libelle) VALUES (?)
Ajout du produit :
INSERT INTO Produit (idCategorie, nom, prix, id) VALUES (?, ?, ?, ?)
Les requêtes comportent des points d’interrogation car hibernate a mit en place des requêtes paramétrables.
Autrement, dit on peut utiliser la requête plusieurs-fois avec les paramètres concernés.
Les paramètres sont dont affichés avec des “?”.
Lors d'un chargement d'objet, Hibernate charge automatiquement tous les objets en relation avec l'objet concerné.
Par exemple si l'on charge un produit, on charge aussi sa catégorie :
On peut voir que la catégorie est bien chargé
Pour charger les instances liées à un objet chargé pour les liens oneToMany, Hibernate charge l'objet concerné ainsi que les objets dont il est en relation. Par exemple, lorsque l'on charge un produit, il charge aussi sa catégorie :
SELECT produit0_.id AS id1_1_, produit0_.idCategorie AS idCatego4_1_1_, produit0_.nom AS nom1_1_, produit0_.prix AS prix1_1_, categorie1_.id AS id0_0_, categorie1_.libelle AS libelle0_0_ FROM Produit produit0_ LEFT OUTER JOIN Categorie categorie1_ ON produit0_.idCategorie=categorie1_.id WHERE produit0_.id=?
Pour charger les instances liées à un objet chargé pour les liens ManyToOne,Hibernate charge seulement l'objet concerné. Par exemple, lorsque l'on charge une catégorie, il charge seulement la catégorie et il prépare le chargement des produits. Hibernate:
select categorie0_.id as id0_0_, categorie0_.libelle as libelle0_0_ from Categorie categorie0_ where categorie0_.id=?
Hibernate:
select produits0_.idCategorie as idCatego4_1_, produits0_.id as id1_, produits0_.id as id1_0_, produits0_.idCategorie as idCatego4_1_0_, produits0_.nom as nom1_0_, produits0_.prix as prix1_0_ from Produit produits0_ where produits0_.idCategorie=?
</code>
Le chargement paresseux consiste donc à charger objet par objet.
Par exemple, avec l'exemple de la catégorie, il charge seulement la catégorie et non les produits, si on ne lui demande pas.