Je considère que, @EmbeddedId
est probablement plus détaillé parce que, avec l' @IdClass
vous ne pouvez pas accéder à l'intégralité de la clé primaire de l'objet à l'aide de n'importe quel champ de l'accès de l'opérateur. À l'aide de l' @EmbeddedId
vous pouvez le faire comme ceci:
@Embeddable class EmployeeId { name, dataOfBirth }
@Entity class Employee {
@EmbeddedId EmployeeId employeeId;
...
}
Cela donne une notion claire des champs qui font de la clé composite, car elles sont toutes regroupées dans une classe qui est accessible par le biais d'un accès sur le terrain de l'opérateur.
Une autre différence avec @IdClass
et @EmbeddedId
, c'est quand il s'agit d'écrire les requêtes HQL :
Avec @IdClass
vous écrivez:
sélectionnez c.ClientId de la Clientèle c
et avec @EmbeddedId
vous devez écrire:
sélectionnez c.MyPk.ClientId de la Clientèle c
Vous devez écrire plus de texte pour la même requête. Certains pourraient faire valoir que ce qui diffère de plus de la langue naturelle comme celle promue par IdClass
. Mais la plupart du temps, la compréhension de droit à partir de la requête d'un champ donné est la partie de la clé composée est d'une aide précieuse.