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é.
entités: strong> p> 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 CODE>
@IDCLASS code> 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 code> avec les deux colonnes de clé étrangère de la cartographie
@manytomany code> cartographie? Il semble un peu ridicule la quantité de travail nécessaire à un scénario commun comme celui-ci. Merci! P> p>
4 Réponses :
Votre mappage semble étrange (en particulier le 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 joincolumn code> partie de
@jointable code> annotation). Je m'attendrais à ce que ce soit comme celui-ci:
@jointable code>. < / p> p>
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? code> C'est le comportement par défaut si elle est correctement annotée. Avez-vous essayé sans le
joincolumn code> (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
ou strong> diviser votre @manytomany dans @ONETOMANY - @manytoOne relation Voir Voici Comment vous pouvez accomplir cette mappage p>
Voici un moyen de résoudre le problème:
client.java: p> Ceci est pour la cartographie unidirectionnelle. Si vous souhaitez une relation bidirectionnelle, modifiez le mappage dans InstrumentTraded.Class code> vers le même. P> p>
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: à p> et d'une manière hibernate génère maintenant des clés primaires pour la table de jointure. p> p>
"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); code> Résultats en double dans les listes.
@Viniciuspires, il crée vraiment une clé primaire composite! Testé.
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); code> Résultats en double dans les listes.