Clés composites dans JPA avec Hibernate
Lorsque vous travaillez avec des bases de données relationnelles, il peut être nécessaire de mapper des clés composites à des classes Java pour les objets- programmation orientée. Dans le code donné, la table Time a une clé composite comprenant levelStation et confPathID. Cet article vous expliquera comment mapper cette clé composite à l'aide de JPA et Hibernate avec les annotations EmbeddedId et IdClass.
IdClass
L'annotation IdClass est utilisée pour mapper plusieurs champs individuels en une seule clé primaire composite (PK). Pour implémenter cette méthode, créez une classe interne statique qui définit la structure composite PK et implémentez ses méthodes equals() et hashCode() pour une comparaison appropriée des valeurs. Identifiez les champs correspondants dans cette classe statique avec ceux de l'entité.
public class TimePK implements Serializable { protected Integer levelStation; protected Integer confPathID; // ... } @Entity @IdClass(TimePK.class) public class Time { @Id private Integer levelStation; @Id private Integer confPathID; // ... }
EmbeddedId
À l'aide de l'annotation EmbeddedId, vous pouvez encapsuler le PK composite en tant qu'élément intégrable. classe au sein de l’entité. Dans la classe intégrable, définissez les champs constituant le PK composite et leurs accesseurs.
@Embeddable public class TimePK { protected Integer levelStation; protected Integer confPathID; // ... } @Entity public class Time { @EmbeddedId private TimePK timePK; // ... }
Différences
Les annotations IdClass et EmbeddedId peuvent être utilisées pour mapper les clés composites , mais ils servent des objectifs légèrement différents :
Requête avec des clés composites
Selon l'annotation utilisée, syntaxe légèrement différente est requis lors d'une requête basée sur des clés composites :
IdClass
select t.levelStation from Time t
EmbeddedId
select t.timePK.levelStation from Time t
Références
[JPA 1.0 Spécification](https://docs.oracle.com/javaee/7/api/javax/persistence/package-summary.html)
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!