Bonjour,
J'ai un gros souci pour mapper une relation avec des tables génériques.
Ce que j'appelle une table générique, est une table qui contient plusieurs types de données :
Dans les autres tables, j'ai des références vers cette table "GENERIC", mais qui se fait avec le CODE et non l'ID...
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 +-----------------------------------------------------------+ | GENERIC | +-----+-----------------+-----------------+-----------------+ | ID | TYPE | CODE | LIBELLE | +-----+-----------------+-----------------+-----------------+ | 1 | STA | ACT | ACTIF | | 2 | STA | INA | INACTIF | | 3 | MAT | MAR | MARIE | | 4 | MAT | CEL | CELIBATAITRE | | 5 | CIV | MR | MONSIEUR | | 6 | CIV | MME | MADAME | | 7 | CIV | MLE | MADEMOISELLE | | 8 | TRA | MAR | MARITIME | | 9 | TRA | AER | AERIEN | | 10 | TRA | FER | FERROVIAIRE | +-----+-----------------+-----------------+-----------------+
Du coup, j'ai un gros problème : si je fais la relation entre un CLIENT et un GENERIC uniquement avec le CODE, je risque d'avoir plusieurs lignes !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 +-----------------------------------------------------------------------+ | CLIENT | +-----+-----------------+-----------------+-----------+-----------------+ | ID | NOM | PRENOM | CIVILITE | SITU_MATRI | +-----+-----------------+-----------------+-----------+-----------------+ | 1 | DUPONT | STHEPANIE | MME | MAR | | 2 | DURAND | CHRISTINE | MLE | CEL | +-----+-----------------+-----------------+-----------+-----------------+
Ex: MAR -> MARIE, MARITIME, ...
Dans le cas de la situation matrimoniale, je veux faire la relation suivante :
CLIENT.SITU_MATRI=GENERIC.CODE et GENERIC.TYPE='MAT'
Et pour les civilités, je veux faire la relation :
CLIENT.CIVILITE=GENERIC.CODE et GENERIC.TYPE='CIV'.
Bien sûr, je n'ai pas le droit de toucher au modèle de données
Comment faire pour mapper cette relation svp ?
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 @Entity @Table(name="GENERIC") public class Generic implements Serializable { @Id @Column(name="ID", nullable=false) @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @Column(name="TYPE", nullable=false) private String type; @Column(name="CODE", nullable=false) private String code; @Column(name="LIBELLE", nullable=false) private String libelle;
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 @Table(name="CLIENT") public class Client { @Id @Column(name="ID", nullable=false) @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @Column(name="NOM", length=50, nullable=false) private String nom; @Column(name="PRENOM", length=50, nullable=false) private String prenom; @ManyToOne @JoinColumns({@JoinColumn(name="???", referencedColumnName="TYPE"), @JoinColumn(name="CIVILITE", referencedColumnName="CODE")}) private Generic civilite; @ManyToOne @JoinColumns({@JoinColumn(name="???", referencedColumnName="TYPE"), @JoinColumn(name="SITU_MATRI", referencedColumnName="CODE")}) private Generic situationMatrimoniale;
Partager