Mapping : Tables génériques
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:
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:
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 :cry:
Comment faire pour mapper cette relation svp ?
Code:
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:
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; |