2.1 Annotation @Entité, @Table

Si vous souhaitez mapper votre classe sur une table de la base de données, vous devez pour cela ajouter jusqu'à 3 annotations.

Tout d'abord, vous devez ajouter une annotation à la classe @Entity. Cette annotation devant la classe indiquera à Hibernate qu'il ne s'agit pas simplement d'une classe, mais d'une classe spéciale dont les objets doivent être stockés dans la base de données.

Exemple:

@Entity
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

C'est suffisant pour qu'Hibernate traite les objets de cette classe d'une manière spéciale.

La deuxième annotation est @Table. Avec son aide, vous pouvez définir le nom de la table dans la base de données à laquelle cette classe sera associée. Exemple:

@Entity
@Table(name="user")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

Si le nom de la classe et le nom de la table sont identiques, l'annotation @Tablepeut être omise.

De plus, si votre application fonctionne avec des tables de plusieurs schémas en même temps, vous devez spécifier dans quel schéma particulier la table se trouve :

@Entity
@Table(name="user", schema="test")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

Oui, tout est aussi simple qu'il y paraît.

2.2 Annotation @Column

La deuxième chose importante à savoir est le mappage des colonnes de table aux champs de classe. Dans la version la plus simple, Hibernate mappera simplement les champs de votre classe d'entité aux colonnes de la table souhaitée.

Si vous souhaitez contrôler toutes les nuances du mappage, vous pouvez utiliser l'annotation @Column. Exemple:

@Entity
@Table(name="user")
class User {
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

L'annotation @Columna divers paramètres, ci-dessous nous considérerons les plus populaires d'entre eux :

# Nom d'attribut Type d'attribut Description
1 nom Chaîne Définit le nom de la colonne de table pour le champ de classe
2 unique booléen Toutes les valeurs de champ doivent être uniques
3 nullable booléen Le champ peut être nul
4 longueur entier Longueur maximale (pour les chaînes)

Ajoutons quelques contraintes aux champs de notre classe User Entity :

  • le nom d'utilisateur doit être unique et ne pas dépasser 100 caractères
  • le niveau peut être nul
  • la date de création ne peut pas être nulle

Alors nos annotations deviennent :

@Entity
@Table(name="user")
class User {
   @Column(name="id")
    public Integer id;

   @Column(name="name", unique=true, length=100)
   public String name;

   @Column(name="level", nullable=true)
   public Integer level;

   @Column(name="created_date", nullable=false)
   public Date createdDate;
}

Vous pouvez créer un objet de type User et même lui affecter tous les champs nuls , cependant, lorsque vous essayez de l'enregistrer dans la base de données, Hibernate effectuera une vérification et si des restrictions sont violées, une exception sera levée.

2.3 Annotation @Id

Et une autre annotation importante est @Id. Il peut être utilisé pour définir la clé primaire d'une table.

Il vous suffit de spécifier cette annotation pour le champ souhaité - et Hibernate fera tout lui-même :

@Entity
@Table(name="user")
class User {
   @Id
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

Si vous souhaitez qu'Hibernate génère indépendamment les identifiants de vos objets lors de leur ajout à la base de données, vous devez ajouter une annotation supplémentaire - @GeneratedValue. Alors notre exemple ressemblerait à ceci :

@Entity
@Table(name="user")
class User {
   @Id
   @GeneratedValue
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

Nous avons omis l'annotation @Columnpour le champ id ici, car il ne contient pas d'informations précieuses - le nom du champ et le nom de la colonne dans la table sont les mêmes, et grâce au reste des annotations, Hibernate comprend déjà que nous parlons d'une table colonne.