2010-07-23 5 views
0

Je suis confronté à un problème étrange, j'ai une table utilisateur (classe d'utilisation) et une table de pays (classe de pays). Un utilisateur peut avoir N nombre de pays. Par conséquent, j'ai ajouté une liste de pays dans la classe d'utilisateur avec la méthode getter et setter. Dans la table j'ai fait le country_id comme clé étrangère dans la table d'utilisateur. Et, j'ai un @OneToMany sur la classe d'utilisateur. Maintenant, quand j'essaie de conserver la classe User avec une collection de pays, je vois que les pays ne sont jamais insérés :(Je mets deux pays et j'insère un utilisateur, donc je devrais être capable de voir 2 rangées d'utilisateurs avec différents pays. Mais je vois un.@OneToMany n'insère pas de clé étrangère dans Hibernate + JPA

Je suis juste perplexe. Est-ce que je fais quelque chose de mal ici?

Répondre

2

Je pense que vous avez mélangé toutes les choses

  1. Chaque utilisateur peut avoir 0 .. * pays, mais est-ce "chaque pays peut appartenir à 1 utilisateur seulement "? cela ne me semble pas rationnel. Par conséquent, je pense que ce devrait être une relation @ManyToMany au lieu de @OneToMany.

  2. "Dans la table j'ai fait le country_id comme clé étrangère dans la table utilisateur". Pour @OneToMany, la clé étrangère n'est pas stockée dans la table utilisateur. C'est simple à comprendre: chaque enregistrement de l'utilisateur peut avoir 1 country_id, comment peut-il représenter la relation "ToMany"? Stocker la clé étrangère dans la table est le comportement par défaut pour @ManyToOne à la place.

  3. "Je vois que les pays ne sont jamais insérés". Insérer automatiquement des pays lorsque l'utilisateur est inséré, c'est quelque chose à voir avec le réglage en cascade. Ajoutez simplement un réglage en cascade approprié et cela devrait fonctionner correctement. (Bien qu'il ne sonne pas très rationnel pour moi)

La façon de faire est suggéré:

  1. Have User.countries être @ManyToMany.

  2. Avoir une table user_country, avec 2 FK, qui sont user_id et country_id, pour stocker la relation entre les utilisateurs et les pays.

Questions connexes