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 :
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 }
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 :
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 }
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
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!