11
votes

JPA: De quel côté devrait être le côté de la propriété dans une relation m: n?

dire, par exemple, j'ai eu deux entités: article et tag (comme dans un blog typique). Chaque article peut avoir de nombreux étiquettes et chaque balise peut être utilisée par de nombreux articles, il s'agit donc d'une relation classique M: N.

J'ai besoin de spécifier un côté possédant avec JPA. Mais de quel côté devrait être le côté de la propriété? Un article ne dépend pas d'une balise certaine et inversement. Existe-t-il une règle générale pour déterminer quel côté devrait être le côté de la propriété?


1 commentaires

Je suppose que "à" vous vouliez dire "deux"? Vous pouvez envisager d'éditer votre message pour le rendre plus facilement lisible.


6 Réponses :


-1
votes

Dans MHO Ceci est un cas typique où une relation @manytomany est nécessaire.

Si vous utilisez une table de jointure, vous pouvez avoir dans votre classe d'article quelque chose comme. < Pré> xxx

puis dans votre classe de balise xxx


2 commentaires

Merci pour l'exemple. Mais pourquoi est l'attribut mappe dans la classe classe et non dans la catégorie classe?


Pas une réponse à la question.



1
votes

Mon point de vue:

Cela dépend de votre entreprise. Quelle entité est plus importante dans votre entreprise.

Dans votre exemple, je pense que l'article devrait appartenir à la propriété,


0 commentaires

11
votes

Chaque relation bidirectionnelle nécessite un côté propre en JPA. Dans le cas particulier de plusieursTomanany :

  • @jointable est spécifié sur le côté de la relation.
    • Le côté de possession est arbitraire , vous pouvez choisir l'une des deux entités pour être le propriétaire.

      de la spécification JPA:

      9.1.26 ANNOTATION DE PLUSTOMANY

      Chaque association à plusieurs à plusieurs a deux côtés, le côté appartenant et le non-possession ou inverse, côté. La jointure La table est spécifiée sur le côté de la propriété. Si l'association est bidirectionnelle, de chaque côté peuvent être désignés comme le côté possédant.


1 commentaires

Spécification JPA 1.0 Page de téléchargement de votre commodité.



1
votes

Il vaut également la peine de mentionner qu'en JPA, le côté de la propriété n'implique pas le côté contenant ou sur le côté qui possède les autres entités. Plus à ce sujet ici: dans Une association bidirectionnelle JPA OneTomany / MétéoTone, ce que l'on entend par "l'inverse de l'association"?


0 commentaires

6
votes

Vous choisissez le côté possédant en considérant où vous souhaitez que l'association soit mise à jour. Vous pouvez mettre à jour de De plusieursTomanany Association en un seul endroit (le côté particulier). Donc, le choix dépend de la façon dont vous voulez gérer / mettre à jour vos champs d'association.


0 commentaires

0
votes

Chaque fois qu'il y a un m: n mappage, c'est-à-dire un mappage bidirectionnel que nous utilisons @manytomanany et @jointable dans notre code.

Pour répondre à cette question "de quel côté devrait posséder la relation" revient aux modèles que vous créez et comment les données doivent être stockées dans la base de données. de
Généralement, les modifications ne sont propagées que dans la base de données du côté du propriétaire de la relation. Laissez-moi vous expliquer selon votre exemple,

Il existe deux tables / modèles / pojos, article et tag . de
chaque fois qu'un message est affiché, une relation avec les balises est faite. de
Ou, chaque fois qu'un livre est publié, une relation avec l'auteur est effectuée est effectuée. de
Donc, le @joincolumn devrait aller dans Publier dans votre cas.


0 commentaires