Maison > Java > javaDidacticiel > Comment mapper des clés composites dans JPA et Hibernate en utilisant @EmbeddedId vs @IdClass ?

Comment mapper des clés composites dans JPA et Hibernate en utilisant @EmbeddedId vs @IdClass ?

Linda Hamilton
Libérer: 2024-12-05 03:24:17
original
522 Les gens l'ont consulté

How to Map Composite Keys in JPA and Hibernate using @EmbeddedId vs. @IdClass?

Mappage des clés composites avec JPA et Hibernate

Dans le code fourni, une clé composite est définie pour la table Time avec levelStation et confPathID comme composants. Pour mapper cette clé composite dans JPA et Hibernate, vous disposez de deux options : @EmbeddedId et @IdClass.

Utilisation de @IdClass

L'annotation @IdClass vous permet de mapper plusieurs champs de l'entité à former la clé primaire composite. Cela nécessite de définir une classe qui représente la clé primaire. Dans ce cas, la classe TimePK peut être définie comme suit :

@IdClass(TimePK.class)
public class Time implements Serializable {
    // ...
}
Copier après la connexion

Ici, TimePK est une classe distincte qui doit définir un constructeur sans argument, des getters/setters pour les champs de clé primaire et des valeurs égales ( ) et hashCode().

Utilisation de @EmbeddedId

L'annotation @EmbeddedId mappe un classe à la clé primaire de l’entité. Contrairement à @IdClass, cette approche combine la classe d'entité et la classe de clé primaire. Voici comment utiliser @EmbeddedId :

@Entity
class Time implements Serializable {
    @EmbeddedId
    private TimePK timePK;
    // ...
}
Copier après la connexion

Dans ce cas, TimePK est une classe interne de l'entité Time et doit également définir un constructeur sans argument, des getters/setters pour les champs clés et des égaux. () et hashCode().

Différences entre @IdClass et @EmbeddedId

Le La principale différence entre @IdClass et @EmbeddedId réside dans leur impact sur la syntaxe des requêtes. Avec @IdClass, vous accéderiez au champ de clé primaire directement via l'entité, tandis qu'avec @EmbeddedId, vous y accéderiez via un getter sur la classe intégrée.

Lors du choix entre les deux, @EmbeddedId transmet le fait que la clé primaire a une identité significative dans votre modèle de domaine, tandis que @IdClass suggère que la clé primaire est simplement une combinaison de champs qui identifie de manière unique le entité.

Références

  • Spécification JPA 1.0 :

    • Section 2.1.4 « Clés primaires et identité d'entité »
    • Section 9.1.14 « EmbeddedId Annotation"
    • Section 9.1.15 "Annotation IdClass"

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