Bonjour,
J'ai un souci pour charger une classe d'héritage; j'ai une classe mère avec les propriétés communes des classes filles et n classes filles; j'ai autant de tables (une pour les colonnes communes et une table par classe fille), pour être plus clair je vais mettre des morceaux de code :
Classe mère :
Une classe fille :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 @Entity @Inheritance(strategy=InheritanceType.JOINED) @DiscriminatorColumn(name="Type_Metadonnee", discriminatorType=DiscriminatorType.INTEGER) @Table(name = "metadonnee") public abstract class Metadonnee implements java.io.Serializable { private MetadonneeId id; private ParamAffichage paramAffichage; private String nom; .... }
Une autre classe fille
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 @Entity @Table(name = "meta_nom") @DiscriminatorValue("0") @PrimaryKeyJoinColumns({ @PrimaryKeyJoinColumn(name="Id_Metadonnee", referencedColumnName="Id_Metadonnee"), @PrimaryKeyJoinColumn(name="Version", referencedColumnName="Version") }) public class MetaNom extends Metadonnee implements java.io.Serializable { private String valeur; ... }
Dans mon cas j'essaie de charger un objet stocké dans la table "meta_texte"
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 = "meta_texte") @DiscriminatorValue("1") @PrimaryKeyJoinColumns({ @PrimaryKeyJoinColumn(name="Id_Metadonnee", referencedColumnName="Id_Metadonnee"), @PrimaryKeyJoinColumn(name="Version", referencedColumnName="Version") }) public class MetaTexte extends Metadonnee implements java.io.Serializable { private String texte; private String titre; ... }
Si j'exécute le code suivant :
Le résultat est false !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 MetadonneeId id = new MetadonneeId(3,1); Metadonnee m = (Metadonnee) session.load(Metadonnee.class, id); System.out.println(m instanceof MetaTexte);
Si le code est le suivant :
L'objet est bien chargé et contient bien les valeurs de la classe mère et est de type "MetaTexte".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 MetadonneeId id = new MetadonneeId(3,1); MetaTexte m = (MetaTexte) session.load(MetaTexte.class, id); System.out.println(m instanceof MetaTexte);
J'ai un autre objet qui contient un objet de la classe "Metadonnee" :
Pourquoi au chargement des objets, hibernate ne me caste-t-il pas automatiquement les objets de type "Metadonnee" dans les classes filles (d'autant plus que la classe "Metadonnee" est abstraite dans mon cas)??!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 @Entity @Table(name = "objet_metadonnee") public class ObjetMetadonnee implements java.io.Serializable { private ObjetMetadonneeId id; private Metadonnee metadonnee; ... }
Merci pour votre aide, j'espère que c'est assez clair.
Partager