0Pricing
Java Academy · Leçon

Mappage des entités avec les annotations JPA

Définissez @Entity, @Table, @Id, @GeneratedValue, @Column et @Embedded pour concevoir des entités propres.

Mappage des entités avec les annotations JPA est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.

Qu’est-ce que la correspondance des entités JPA ?

JPA (interface de programmation de la persistance Jakarta) associe les classes Java aux tables d’une base de données à l’aide d’annotations. Hibernate est le fournisseur JPA le plus courant. Aucun DDL SQL n’est nécessaire — JPA génère les schémas à partir des annotations.

@Entity et @Table

@Entity indique qu’une classe est une entité JPA. @Table personnalise le nom de la table, le schéma et les contraintes d’unicité. Chaque entité doit posséder un constructeur sans argument (qui peut être protégé).

@Entity
@Table(name = "users", uniqueConstraints = @UniqueConstraint(columnNames = "email"))
public class User {
    // ...
    protected User() {} // required by JPA
}

@Id et @GeneratedValue

@Id indique le champ de clé primaire. @GeneratedValue configure la stratégie de génération automatique : IDENTITY (auto-incrémentation de la base de données), SEQUENCE (séquence de la base de données, préférable pour les insertions en masse) ou AUTO.

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}

@Column : personnalisation des colonnes

@Column définit le nom de la colonne, sa longueur, l’acceptation des valeurs nulles et son unicité. Sans cette annotation, le nom du champ devient le nom de la colonne.

@Column(name = "full_name", nullable = false, length = 100)
private String name;
@Column(name = "email", unique = true, nullable = false)
private String email;
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;

@Embedded et @Embeddable

Extrayez un groupe de colonnes dans un objet valeur réutilisable annoté avec @Embeddable. Utilisez @Embedded dans l’entité pour inclure ses champs.

@Embeddable
public class Address {
    private String street, city, country;
    @Column(name = "zip_code") private String zipCode;
}
@Entity
public class User {
    @Embedded private Address address;
}

@Enumerated : persistance des énumérations

Enregistrez les énumérations sous forme de chaîne correspondant à leur nom (STRING) ou de nombre ordinal (ORDINAL). Utilisez toujours STRING — les valeurs ordinales cessent de fonctionner lorsque l’ordre des valeurs de l’énumération est modifié.

@Enumerated(EnumType.STRING)
@Column(nullable = false)
private UserStatus status; // stored as "ACTIVE", "INACTIVE", etc.

@CreationTimestamp et @UpdateTimestamp

Ces annotations propres à Hibernate définissent automatiquement l’horodatage lors d’une insertion et d’une mise à jour, respectivement — il n’est pas nécessaire d’utiliser manuellement @PrePersist.

@CreationTimestamp
@Column(updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
private LocalDateTime updatedAt;

@Transient : exclusion des champs

Les champs annotés avec @Transient ne sont pas persistés. Utilisez cette annotation pour les champs dérivés ou calculés qui ne doivent pas être stockés dans la base de données.

@Transient
public String getFullName() { return firstName + " " + lastName; }

@Lob : objets volumineux

Utilisez @Lob pour associer des colonnes de texte volumineux (TEXT/CLOB) ou binaires (BLOB). PostgreSQL associe @Lob String à TEXT.

@Lob
@Column(name = "content")
private String content; // maps to TEXT in PostgreSQL

Contrat de equals et hashCode

Les entités JPA placées dans des collections doivent implémenter equals / hashCode à partir de la clé métier, et non de l’ID généré, qui est nul avant la persistance. Utilisez @NaturalId ou une clé de substitution UUID.

@Override public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof User u)) return false;
    return email != null && email.equals(u.email);
}
@Override public int hashCode() { return getClass().hashCode(); }

@Version pour le verrouillage optimiste

Ajoutez un champ @Version. Hibernate l’incrémente à chaque mise à jour. Si deux transactions mettent à jour simultanément la même ligne, la seconde lève OptimisticLockException.

@Version
private Long version; // auto-managed by Hibernate

Vérification rapide

Pourquoi @Enumerated doit-il utiliser STRING plutôt que ORDINAL ?

Récapitulatif

Utilisez @Entity/@Table pour associer les classes aux tables. Utilisez @Id+@GeneratedValue pour les clés primaires. Utilisez @Column pour les contraintes. Utilisez @Embedded pour les objets valeur. Utilisez toujours @Enumerated(STRING). Ajoutez @Version pour le verrouillage optimiste.

Questions Fréquemment Posées

La leçon « Mappage des entités avec les annotations JPA » est-elle gratuite ?

Oui — le texte complet de « Mappage des entités avec les annotations JPA » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Mappage des entités avec les annotations JPA » ?

Définissez @Entity, @Table, @Id, @GeneratedValue, @Column et @Embedded pour concevoir des entités propres. Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Java Academy ?

Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Mappage des entités avec les annotations JPA » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?

Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Mappage des entités avec les annotations JPA
  2. Référentiels Spring Data et méthodes de requête
  3. Relations One-to-Many et Many-to-Many
  4. Pagination, tri et projections
← Retour à Java Academy