Bonjour à tous.
Je fais ce post car je n'arrive pas à avoir les idées claires sur un point particulier. J'ai déjà fais ce post sur la version anglophone du forum, mais j'ai du mal m'exprimer, d'ailleurs même en Français ça n'est pas évident.
Supposons que l'on aie 2 tables A et B avec 1 relation oneToMany de A vers B. Et supposons que la colonne 'a' de 'B' référence la clef primaire de 'A'.
Tout d'abord, le paramètre mappedBy est il nécessaire avec l'annotation @oneToMany?
Je suppose qu'il n'est pas nécessaire d'utiliser mappedBy lorsque la table B n'a qu'une seule colonne permettant de référencer A vu que dans ce cas hibernate pourra deviner quelle est la colonne concernée mais je voudrais confirmation.
Ensuite, si la valeur de mappedBy est le nom de la colonne de jointure dans B (mappedBy="a"), cela implique aussi qu'il va falloir mettre l'attribut 'a' dans la table B, sinon on aura un message disant que l'attribut n'a pas été trouvé. Et dans ce cas, dans la table B, on va avoir deux attributs qui vont être mappés par la colonne 'a', l'attribut lié à @manyToOne et id_person, ce qui créé une erreur "Repeated column in mapping for entity", à moins que l'on rajoute les paramètres insertable=false et updatable=false...
Encore une chose, si on utilise mappedBy dans A, pourquoi est il nécessaire d'utiliser joinColumn dans B, j'ai l'impression que c'est de la redondance d'info, non.
Bon voilà, il y a surement des erreurs dans ce que j'ai dit, et c'est justement pour ça que je le dis, pouvez vous me corriger SVP?
Et d'autre part, je trouve cette histoire de "Repeated column in mapping ..." très très bizarre. On m'explique qu'il y a 2 mappings pour la même colonne, mais je ne vois pas le rapport, pour moi il n'y a qu'un mapping:
exemple:
Code:
| table Personne |
| id | name |
| table Adresse |
| id | id_personne | address |
ou Adresse.id_personne reference Person.id
Si mon entité Adresse contient
Code:
Addresse{
private Long id;
private Long id_personne;
@ManyToOne
@JoinColumn(name="id_personne")
private Personne personne;
private String address;
...
}
Voilà, les 2 attributs mappés par la colonne id_personne sont id_personne et personne. Ok, pour id_personne, la c'est évident c'est une correspondance directe entre l'attribut et la colonne. Pas ok pour personne. Dire que hibernate utilise la colonne id_person pour retrouver la personne liée à une adresse n'a rien à voir selon moi avec une quelconque histoire de mapping!!! En tout cas quand j'imagine comment cela peut fonctionner en interne, ca me parait poser aucun problème.
Voilà, j'aimerais avoir les idées plus claires sur tous ces sujets là, cela me permettra peut être de ne pas créer un nouveau post pour une erreur sql sur une requête que je n'ai pas écrite, mais que hibernate semble créer en se basant sur les annotations (table not found!!!).
Merci d'avance.