Ce n'relation propriétaire des moyens en relation bidirectionnelle?
J'ai un modèle simple avec un Question
et Choice
objet.
- UNE Question a BEAUCOUP de CHOIX(S).
- BEAUCOUP de Choix a UNE Question
Il existe deux façons de mettre en œuvre qu'avec Hibernate
Mise en œuvre: Le propriétaire de la côté est le Choix
Question.java
@OneToMany (mappedBy="question")
private Set choices = new HashSet();
Choice.java
@ManyToOne
@JoinColumn (name="QUESTION_ID")
private Question question;
Mise en œuvre de Deux: Le propriétaire de la côté est Question
Question.java
@OneToMany
@JoinColumn (name = "QUESTION_ID")
private Set choices = new HashSet();
Choice.java
@ManyToOne
@JoinColumn (name="QUESTION_ID", updatable = false, insertable = false)
private Question question;
Quelle est la différence entre les deux?
- Me démontrer que je me trompe, mais je crois que la modification de la non-possession d'un côté n'est pas reflétée dans la base de données automatiquement (à l'aide sale de la vérification), lors de la modification de posséder côté sans modifier l'autre. Notez que dans ce cas, le nombre de côté est le choix naturel pour le propriétaire car il a une clé étrangère sur la base de données de niveau.
- N'avez-vous pas oublier de mettre le type d'argument dans l'Ensemble de choix? E. G : Set<Options> choises. Si vous ne l'utilisez pas, comment hibernate pouvez déterminer où (quelle classe?) pour trouver la "question" de l'attribut que vous faites référence dans le mappedBy annotation.. ou mise en veille prolongée est conscient de que en quelque sorte.. ou je ne sais pas comment cela fonctionne derrière les rideaux..
Vous devez vous connecter pour publier un commentaire.
Votre premier exemple est normal et correct bidirectionnel un-à-plusieurs ou plusieurs-à-une cartographie. Réglage
Question
àChoice
-attribut ("propriétaire") est suffisant pour avoir des relation persiste. Entité graphique dans la mémoire seront foiré jusqu'à l'autre côté de la relation est lu à partir de la base de données à nouveau. À partir de labase de données du point de vue de la propriétaire est l'entité qui est conservé à table qui ont colonne de clé étrangère (même bidirectionnel un-à-un). Dans la spécification, ce qui est expliqué de la manière suivante:
En JPA les termes de votre deuxième exemple n'est pas propriétaire de côté, en raison de l'absence de
mappedBy
. Au lieu de cela, vous avez deux unidirectionnel relations qui sont forcés d'utiliser la même colonne que le magasin. Au moins avec Hibernate 3.5.6 il va se comporter de la façon suivante:Question
àchoice
-attribut ne sera pas conservée relation.Choice
àquestion
-attribut ne sera pas conservée relation."QUESTION_ID"
les deux ont à être ensemble (oui, pasinsertable
question
).