Bonjour a tous,
Apres plusieurs heures de recherche, je n'ai toujours pas trouve de solution et encore une fois je vais me tourner vers vous pour solliciter votre aide.
Comme le nom du post l'indique, j'ai un probleme avec l'heritage et Hibernate dans mon application Web. Dans cette application j'ai plusieurs type d'utilisateurs Administrateur, Moniteur, ... (4 au total) mais certain utilisateur peuvent apparaître dans plusieurs categories.
Pour le schema de la base, pas de probleme ; j'ai cree une table Utilisateur avec un id, un login, un pass, un mail, ... en gros les infos communes.
Ensuite j'ai cree 4 tables correspondant à mes utilisateurs avec leurs donnees specifiques. Pour faire apparaitre la notion d'heritage, il y a une contrainte de cle etrangere sur l id des tables filles avec l'id de la table UTILISATEUR parente.
Je me susi ensuite rendu sur le site de Hibernate pour regarder un peu dans la doc et j'ai trouve ce que je cherchais : mapper mes classes correspondant aux tables de la meme facon que dans mon MCD.
Dans l'application, lorsque je recupere un utilisateur par son id ou son mot de passe, ma couche DAO me renvoient un utilisateur. Maintenant dans certains cas j'aurais besoin de recuperer les infos specifique de cette utilisateur et je tente tout simplement de faire un cast de mon Utilisateur (sachant que dans mon modele du domaine les classes heritent de la meme maniere que dans le MCD).
Le probleme que j'ai avec ca, c'est que lorsque l'utilisateur et soit l'un soit l'autre, le cast fonctionne. En revanche, lorsque mon utilisateur apparait dans 2 classes filles c'est la cata ; en effet j'ai l impression que hibernate me renvoie le premier utilisateur qu'il trouve dans la table fille.
Par exemple :
UTILISATEUR
id : 2
login : login
pass : pass
ADMIN
id : 2
etablissement : CRD001
MONITEUR
id : 2
addresse : 123 rue de Paris ....
Lorsque je tente de faire un cast de l'utilisateur(2) en moniteur je me retrouve avec un ClassCastException alors que si je le cast en ADMIN, ca fonctionne.
Je tiens a preciser que ADMIN n'est pas une evolution de MONITEUR, ce sont des roles differents meme si les nom sont pas forcement bien choisi.
Voila, j'espere que j'ai ete clair et que vous pourrez me venir en aide.
Merci
Partager