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 :

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 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;
...
}
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
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;
...
}
Dans mon cas j'essaie de charger un objet stocké dans la table "meta_texte"
Si j'exécute le code suivant :
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);
Le résultat est false !!

Si le code est le suivant :
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);
L'objet est bien chargé et contient bien les valeurs de la classe mère et est de type "MetaTexte".

J'ai un autre objet qui contient un objet de la classe "Metadonnee" :
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;
...
}
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)??!!

Merci pour votre aide, j'espère que c'est assez clair.