Bonjour,

Il doit y avoir une subtilité que je ne comprends pas, aussi je me tourne vers votre expérience pour avoir une réponse a mes interrogations.

Soit deux entities A et B, et voulant avoir un mapping relationnel one to many de A vers B.

Si je me contente d'annoter le getter de B dans A avec seulement @OneToMany, alors tout marche. toplink me crée bien une colonne dans B ayant pour contenu un identifiant de A avec une FK. Si maintenant je veux préciser le nom de colonne créer automatiquement dans B ayant pour rôle la relation vers A, d'après le book que j'ai et qui me sert d'apprentissage "Enterprise JavaBean 3.0 par Bill Burke & Richard Monson-Haefel", n'ayant pas la possibilité d'annoter avec JoinColumn côté B puisque qu'on fait de l'unidirectionnel, il suffit de placer l'annotation JoinColumn du côté de A avec le OneToMany.

On obtient donc le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Entity
public class A {
    private Long id;
    private List<B> bs;
 
    @Id
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
 
    @OneToMany
    @JoinColumn(name="NOM_DE_LA_COLONNE_FK")
    public List<B> getBs() { return bs; }
    public void setBs(List<B> bs) { this.bs = bs; }
 
}
 
@Entity
public class b {
    private Long id;
 
    @Id
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
}
Toplink m'envoit gentillement aller me faire ###### en me disant qu'il ne peut appliquer JoinColumn et me demander de passer par du JoinTable. Sauf que si je veux avoir une version plus normalisé de mes données, le JoinTable est proscrit dans du OneToMany, d'autant plus qu'il en est capable, car sans JoinColumn il le fait

Quelqu'un en sait plus ?