Mapping d'une table contenant plusieurs entités
Bonjour les amis,
Je suis face à un problème qui ne devrait pas être inconnu des dévelopeurs plus expérimentés :)
Nous avons une table "code_list" qui contient des données comme ceci:
| id_code_list |
val_num |
val_string |
label |
| TYP_AFF |
3 |
3 |
Autre |
| TYP_AFF |
1 |
1 |
Divers |
| COD_LAN |
1 |
1 |
Français |
On voit que chaque id_code_list correspond à un type de donnée (comme dans un enum en fait) et que l'identifiant (numérique ou String) correspond à la donnée elle-même.
J'ai pensé implémenter ceci avec un héritage de type (SINGLE_TABLE) de la manière suivante:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
@Entity
@Table(name = "CODE_LIST")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "ID_CODE_LIST")
public abstract class CodeListString {
@Id
@Column(name = "VAL_STRING")
protected String value;
@Embedded
protected Label label;
@Embedded
protected PersistenceSignature signature; |
Enité AffiliateType:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
@Entity
@DiscriminatorValue("TYP_AFF")
@Access(AccessType.PROPERTY)
public class AffiliateType extends CodeListString{
public static final AffiliateType SOCIAL_SECRETARIAT = new AffiliateType("1");
public static final AffiliateType VARIOUS_SERVICES = new AffiliateType("2");
public static final AffiliateType OTHERS = new AffiliateType("3");
public static final AffiliateType SOPA = new AffiliateType("9");
public AffiliateType() {}
private AffiliateType(String value) {
super(value);
}
} |
et mon entité Affilié:
Code:
1 2 3 4 5 6 7 8 9 10
| @Entity
@Table(name = "AFF")
public class Affiliate {
@Id
@Column(name = "NO_AFF")
private int id;
@ManyToOne
@JoinColumn(name = "TYP_AFF")
private AffiliateType type; |
Mais je vois que la relation prend comme Foreign Key les deux champs de CodeList alors que dans la table aff on en a qu'un...:
Citation:
Foreign key (FK7re97tvvbbo2km961gy9b5jw6:aff [typ_aff])) must have same number of columns as the referenced primary key (code_list [val_string,id_code_list])
Avez-vous une idée de comment faire un mapping correct pour ce type de structure ?