JPA/Hibernate: Quoi de mieux pour les clés primaires composites, @IdClass ou @EmbeddedId implémentations et pourquoi?
quoi de mieux pour JPA/Hibernate les clés primaires composites, @IdClass ou @EmbeddedId implémentations et pourquoi?
Cette est volontairement naïve question. J'ai décidé d'utiliser @EmbeddedId (pour quelque raison que ce soit) et je me sens comme j'ai fait le mauvais choix. Un déréférencement de la embeddedId qui contient les propriétés de la colonne est redondant et très enclin à l'erreur lors du codage.
Y a plus de raisons pour et/ou contre les autres? Est l'une recommandation par la JPA (spec)?
- double possible de Qui anotation dois-je utiliser: @IdClass ou @EmbeddedId
- Il semble être. Mais il n'a pas plus de raisons.
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, si possible, éviter composite id à tous les coûts. Mais si vous avez vraiment besoin, je vous recommande
@EmbeddedId
.@IdClass
est en fait un vestige de l'EJB 2.1 fois pour le rendre plus facile de migrer à partir de BMP. Dans quelques rares cas particuliers, il peut être mieux que@EmbeddedId
trop. Cependant, en général,@EmbeddedId
est mieux et plus OO puisqu'il incarne le concept de l'os de la clé de beaucoup mieux dans l'objet.Vous souhaiterez peut-être utiliser
@AttributeOverride(s)
si vous avez besoin dans le champ de clé.Je ne vois pas pourquoi pensez-vous que la référence à l'embedded id est redondant et sujette à erreur.
Que Pascal a écrit voici une partie de la réponse:
Annotation dois-je utiliser: @IdClass ou @EmbeddedId
En fin de compte, je crois que l'aide
@IdClass
est beaucoup plus facile dans la pratique, parce que vous devez ajouter leembeddedId
nom de la propriété de déréférencer les propriétés PK, alors que ce ne sont pas écrites pour tous les non-PK propriétés.Vous devez toujours vous souvenir exactement les propriétés qui font partie d'un PK et ceux qui ne le sont pas. Ce qui complique l'écriture de requêtes JPQL unneccessarily.
Aussi, autant que je sache, la JPA 2.0 spec permet de mettre de l'
@Id
sur@XToX
/@JoinColumn
/s propriétés, et il introduit la@MapsId
annotations, de sorte que la cartographie de l'identification des relations (un.k.un. dérivée des identifiants JPA) sont plus naturelles à mettre en œuvre.I. Mémoriser à l'aide de idclass de le faire. Mais je recommanderais de faire tout ce que vous pouvez pour éviter les multi champ clés. Ils ne créent de travail supplémentaire.