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:
Enité AffiliateType:
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 @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;
et mon entité Affilié:
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 @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); } }
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...:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
Avez-vous une idée de comment faire un mapping correct pour ce type de structure ?Foreign key (FK7re97tvvbbo2km961gy9b5jw6:aff [typ_aff])) must have same number of columns as the referenced primary key (code_list [val_string,id_code_list])
Partager