Dans cet article


Offres d'emploi

Tags

Utilisation de l’annotation @GeneratedValue

Utilisation de l’annotation @GeneratedValue

Cet article va nous aider à comprendre l’utilisation de l’annotation @GenerateValue.

Cette annotation indique que la clé primaire est générée de façon automatique lors de l’insertion en base. Sans cette annotation, la valeur de l’identifiant de la clé primaire doit être affecté avant l’insertion en base.

Elle est utilisée avec une autre annotation @Id qui permet de mapper une clé primaire sur un champ unique.

Cette annotation possède plusieurs attributs : strategy, generator. Nous pouvons définir le mode de génération de la clé primaire à l’aide de l’attribut strategy.

Cet attribut peut prendre plusieurs valeurs :

Strategy = GenerationType.AUTO : La génération de la clé primaire est laissée à l’implémentation.  C’est hibernate qui s’en charge et qui crée une séquence unique sur tout le schéma via la table hibernate_sequence.

Strategy = GenerationType. IDENTITY : La génération de la clé primaire se fera à partir d’une Identité propre au SGBD. Il utilise un type de colonne spéciale à la base de données.

Exemple pour MySQL, il s’agit d’un AUTO_INCREMENT.

Strategy = GenerationType. TABLE : La génération de la clé primaire se fera en utilisant une table dédiée hibernate_sequence qui stocke les noms et les valeurs des séquences.

Cette stratégie doit être utilisée avec une autre annotation qui est @TableGenerator.

Exemple:

1
2
3
@GeneratedValue (strategy = GenerationType.TABLE, generator = "clientGenerator") 

@TableGenerator (name = "clientGenerator", pkColumnName = "nom\_colonne\_pk", valueColumnName = "nom\_colonne\_valeur_pk", allocationSize = 1) 

Strategy = GenerationType. SEQUENCE : La génération de la clé primaire se fera par une séquence définie dans le SGBD, auquel on ajoutera l’attribut generator. Cette stratégie doit être utilisée avec une autre annotation qui est @SequenceGenerator. Cette annotation possède l’attribut name pour le nom du generator, l’attribut sequenceName pour le nom de la séquence et enfin allocationSize qui est l’incrémentation de la valeur de la séquence.

Exemple:

1
2
3
@GeneratedValue (strategy = GenerationType._SEQUENCE_, generator = "enerator_client")

@SequenceGenerator (name = "generator\_client", sequenceName = "WINDEV\_SEQ", allocationSize = 1) 
Nous verrons ultérieurement comment utiliser d’autres annotations de mapping.

L'équipe AXOPEN

Voir aussi les articles suivants

La clause HAVING en Hibernate 4

La clause HAVING en Hibernate 4

Le 27/12/2013 par Saber

Comment utiliser la clause SQL HAVING avec Hibernate 4 ? Rappel théorique En SQL, lorsqu’une requête possède une condition sur une colonne sur laquelle porte une clause GROUP BY, cette condition n’est pas exprimée dans la clause WHERE mais dans la clause HAVING. En pratique Si vous savez faire une requête simple avec Hibernate 4, écrire une condition simple et utiliser la clause GROUP BY, la mise en place d’un HAVING ne vous posera pas de problème.
Lire l'article

Les nativeQuery en Hibernate 4, ou comment lancer une requête écrite « en dur »
Hibernate permet de répondre à la plupart des besoins pour créer des requêtes de tout type : du simple « SELECT FROM » aux plus complexes des requêtes imbriquées. Pourtant, cette API ne permet pas de réaliser toutes les requêtes que l’on désire. En effet, il est malheureusement impossible de créer une requête composée d’un « MINUS », ou d’un « INTERSECT ». Il est aussi impossible d’utiliser. par exemple, des REGEX dans nos requêtes.
Lire l'article

La clause WHERE en Hibernate 4

La clause WHERE en Hibernate 4

Le 19/12/2013 par Saber

Comment mettre en oeuvre la clause SQL WHERE avec Hibernate 4 ? Le principe Si vous savez faire une requête simple avec Hibernate 4, vous êtes prêt à mettre en oeuvre une clause WHERE. Pour cela, il faut utiliser la classe javax.persistence.Predicate : cette classe représente une condition ou une série de conditions.  Les fonctions permettant d’appeler les opérateurs sont fournies par la boîte à outils qu’est le CriteriaBuilder. Ces fonctions prennent en paramètre des Expression<?
Lire l'article