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.
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 { // ... }
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().
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; // ... }
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().
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é.
Spécification JPA 1.0 :
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!