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 :

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     |
+-----+-----------------+-----------------+-----------------+
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
+-----------------------------------------------------------------------+
| CLIENT                                                                |
+-----+-----------------+-----------------+-----------+-----------------+
| ID  | NOM             | PRENOM          | CIVILITE  | SITU_MATRI      |
+-----+-----------------+-----------------+-----------+-----------------+
| 1   | DUPONT          | STHEPANIE       | MME       | MAR             |
| 2   | DURAND          | CHRISTINE       | MLE       | CEL             |
+-----+-----------------+-----------------+-----------+-----------------+
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 !
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;