8
votes

La relation de nombreusesTomanany utilisant JPA avec le fournisseur hibernate ne crée pas de clés primaires

J'ai créé deux entités JPA (client, instrumentTraded) utilisant Hibernate en tant que fournisseur qui possède une relation de nombreusesTomanany. Après avoir laissé Hibernate générer les tables de MySQL, il apparaît que la table de relation de plusieurs-sexes ne contient pas de clés primaires pour les deux clés étrangères. Cela permet des enregistrements en double dans la table mults à plusieurs, ce qui n'est pas le résultat souhaité.

Tables générés: xxx

Table préférée: xxx

entités: xxx

après avoir fait quelques Recherche On dirait que la seule solution est pour Mappage d'une table de jointure avec des colonnes supplémentaires Utilisation de @ONETOMANY @IDCLASS et une classe de clé principale composite lorsque je n'ai pas besoin de colonnes supplémentaires. Est-ce que la seule solution à part celle que j'ai incluse dans le code ci-dessus, qui utilise un @uniqueconstraint avec les deux colonnes de clé étrangère de la cartographie @manytomany cartographie? Il semble un peu ridicule la quantité de travail nécessaire à un scénario commun comme celui-ci. Merci!


2 commentaires

Stackoverflow.com/questions/1212058/...


Vaut également la peine de vérifier si vous n'avez pas annoncé de record accidentellement, cela m'est arrivé, donc list.add (x); list.add (x); Résultats en double dans les listes.


4 Réponses :


2
votes

Votre mappage semble étrange (en particulier le joincolumn partie de @jointable annotation). Je m'attendrais à ce que ce soit comme celui-ci: xxx

mais à moins que vous ne souhaitiez pas remplacer les valeurs par défaut (et je suppose que vous le faites), je voudrais simplement ignorer le @jointable . < / p>


3 commentaires

Je souhaite remplacer les valeurs par défaut, car il pluralise le fichier instrument_traded_id (instruments_traded_id). J'ai une stratégie de dénomination personnalisée qui ajoute "_ID" si elle "_ID" n'existe pas à la fin d'une clé étrangère. Je peux enlever les Joincolumns = @ Joincolumn. Avez-vous un exemple de travail de plusieurs fois en créant une clé primaire composée de deux clés étrangères de la table de plusieurs fois?


@dukethrash: Avez-vous un exemple de travail d'une multitude de personnes qui crée une clé primaire constituée de deux clés étrangères dans la table de plusieurs tomany? C'est le comportement par défaut si elle est correctement annotée. Avez-vous essayé sans le joincolumn (ou avec ce qui précède)?


Oui, j'ai essayé la vôtre (à l'exception de l'exception que référencéeColumn est en fait référencéeColumnName) et ne génère toujours pas les clés primaires. J'ai même ajouté ce qui suit sur InstrumentTraded Juste pour voir si cela changerait quoi que ce soit. @Manytomany (fetch = fetchtype.lazy, mappéby = "InstrumentsTraded") Liste privée Clients;



0
votes

ou diviser votre @manytomany dans @ONETOMANY - @manytoOne relation Voir Voici Comment vous pouvez accomplir cette mappage


0 commentaires

8
votes

Voici un moyen de résoudre le problème:

client.java: xxx

Ceci est pour la cartographie unidirectionnelle. Si vous souhaitez une relation bidirectionnelle, modifiez le mappage dans InstrumentTraded.Class vers le même.


0 commentaires

19
votes

J'ai eu un problème similaire. Tout ce que j'ai fait était que j'ai changé le type de collection de la liste pour définir: xxx

à xxx

et d'une manière hibernate génère maintenant des clés primaires pour la table de jointure.


4 commentaires

"Toutes les grandes choses sont simples ..."


Est-ce que ça? Ou est-ce juste le Java set faire son travail sur la mémoire?


Vaut également la peine de vérifier si vous n'avez pas annoncé de record accidentellement, cela m'est arrivé, donc list.add (x); list.add (x); Résultats en double dans les listes.


@Viniciuspires, il crée vraiment une clé primaire composite! Testé.