Maison > Java > javaDidacticiel > Comment mapper efficacement les clés composites dans JPA et Hibernate à l'aide de « @EmbeddedId » et « @IdClass » ?

Comment mapper efficacement les clés composites dans JPA et Hibernate à l'aide de « @EmbeddedId » et « @IdClass » ?

Susan Sarandon
Libérer: 2024-12-11 11:20:11
original
271 Les gens l'ont consulté

How to Effectively Map Composite Keys in JPA and Hibernate using `@EmbeddedId` and `@IdClass`?

Mappage de clés composites avec JPA et Hibernate

Lors du mappage d'entités sur des tables de base de données, il est courant d'utiliser des clés primaires pour identifier de manière unique les enregistrements. Les clés composites, composées de plusieurs colonnes, sont souvent utilisées dans les systèmes de bases de données existants. JPA et Hibernate fournissent tous deux des annotations pour gérer efficacement les clés composites.

Utilisation d'EmbeddedId

L'annotation EmbeddedId indique qu'une classe Java représente une clé primaire composite. Il mappe la classe à la clé primaire clusterisée de la table. La classe doit :

  • Être annotée avec @Embeddable
  • Définir des propriétés publiques ou protégées correspondant aux colonnes de clé primaire
  • Avoir un constructeur public qui prend des valeurs pour tous colonnes de clé primaire
  • Implémenter les méthodes equals() et hashCode() pour la valeur égalité

Exemple avec EmbeddedId

@Entity
public class Time {
    @EmbeddedId
    private TimePK timePK;

    private String src;
    private String dst;
    private Integer distance;
    private Integer price;
}

@Embeddable
public class TimePK {
    private Integer levelStation;
    private Integer confPathID;

    // Constructor, equals(), and hashCode() methods omitted for brevity
}
Copier après la connexion

Utilisation d'IdClass

L'annotation IdClass spécifie que plusieurs champs ou les propriétés d'une classe d'entité constituent une clé primaire composite. La classe doit :

  • Étendre un objet sérialisable (par exemple, java.io.Seriallessly)
  • Avoir un constructeur public sans argument
  • Définir public (ou protégé , avec un accès basé sur les propriétés) champs ou propriétés correspondant aux colonnes de clé primaire
  • Implémenter les méthodes equals() et hashCode() pour l'égalité des valeurs

Exemple avec IdClass

@Entity
@IdClass(TimePK.class)
public class Time {

    @Id
    private Integer levelStation;
    @Id
    private Integer confPathID;

    private String src;
    private String dst;
    private Integer distance;
    private Integer price;
}

public class TimePK implements Serializable {
    private Integer levelStation;
    private Integer confPathID;

    // Constructor, equals(), and hashCode() methods omitted for brevity
}
Copier après la connexion

Choisir entre EmbeddedId et IdClass

EmbeddedId crée un classe distincte pour la clé composite, tandis qu'IdClass utilise la classe d'entité elle-même pour contenir les champs de clé primaire. EmbeddedId est plus explicite et suggère une entité significative, tandis qu'IdClass convient mieux aux combinaisons de champs qui n'ont pas de signification indépendante.

Références

  • Spécification JPA 1.0 : https://jcp.org/en/jsr/detail?id=220

    • Section 2.1.4 : https://jspec.dev.java.net/nonav/javadoc/javax/persistence/doc-files/javax/persistence/spec/version-1_0-final.doc.html#section_2.1.4
    • Section 9.1.14 : https://jspec.dev.java.net/nonav/javadoc/javax/persistence/doc-files/javax/persistence/spec/version-1_0-final.doc.html#section_9.1.14
    • Section 9.1.15 : https://jspec.dev.java.net/nonav/javadoc/javax/persistence/doc-files/javax/persistence/spec/version-1_0-final.doc.html#section_9.1.15

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal