bonjour ;
j'ai deux entité qui hérite d'une autre, et j'ai une relation entre les deux classes filles. je veut générer la base a partir de JPA, il génére les tables mais les clés étrangère pointe vers la table mère.
bonjour ;
j'ai deux entité qui hérite d'une autre, et j'ai une relation entre les deux classes filles. je veut générer la base a partir de JPA, il génére les tables mais les clés étrangère pointe vers la table mère.
Quelle strategie d'heritage as tu implémentée? Peux ton voir les codes de tes classes?
Juste pour voir si j'ai bien compris, JPA créé une association récursive au niveau de l'entité mère alors que tu demandes une association entre les deux entités filles ?
La foreign key référence toujours la table principale sous-jacente à l'entité cible dans la relation annotée par JPA.
(en stratégie JOIN, cette table principale est la feuille de l'arbre ISA)
Si vous avez donc :
la FK qui sera générée pour exprimer la relation hasSister pointera vers la table générée pour EntityDaugther2, cette table ne sera la même que celle de l'entité Mother que si la stratégie d'inhéritance choisie est SINGLE_TABLE.
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 @Entity @Inheritance(strategy = InheritanceType.THE_STRATEGY_YOU_CHOSE) class EntityMother { } @Entity class EntityDaugther1 extends EntityMother { @OneToOne EntityDaugther2 hasSister ; } @Entity class EntityDaugther2 extends EntityMother { }
MAIS si vous avez écrit :
parce que hasSister peut aussi bien être une EntityDaugther2 qu'une EntityDaugther2, alors évidemment la FK sera sur la table sous-jacente à l'entité Mother.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 @Entity class EntityDaugther1 extends EntityMother { @OneToOne Mother hasSister ; }
Notez que ce dernier cas ne peut fonctionner en TABLE_PER_CLASS : dans le modèle relationnel, les FK ne sont pas polymorphes : la contrainte FK ne sera tout simplement pas générée.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager