IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Probleme d'heritage avec des utilisateurs


Sujet :

Hibernate Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 7
    Points : 5
    Points
    5
    Par défaut [Résolu] Probleme d'heritage avec des utilisateurs
    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

  2. #2
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Humm ... pas convaincu qu'il y ait de réelle solution pour ton problème.
    A mon sens, lorsque tu utilises l'héritage Hibernate, chaque objet ne peut être que d'un type à la fois. Et donc ça ne répond pas à ta problématique de rôle...
    Un contournement pour continuer à utiliser l'héritage serait de créer des tables et classes mixtes, genre AdminMoniteur, mais c'est tordu.

    Sinon, je pense qu'il faut revoir la conception depuis le début de ton modèle.
    Par exemple tu pourrais avoir quelquechose du genre :

    Utilisateur (ta table d'aujourd'hui qui contient les données communes)
    Role utilisateur : une table générique qui ne contient que une id et en liaison 1-n avec Utilisateur
    Admin, Moniteur, etc ... qui héritent de rôle utilisateur.

    Dans ce cas, tu n'as pas à bien un utilisateur physique = 1 objet (ce qui n'était pas le cas dans ta solution).
    Si tu veux pouvoir accéder aux informations spécifiques de admin etc ... facilement, tu peux toujours mettre des setters/getters dans ta classe utilisateur comme getAdminInfo qui renvoie un objet admin ou null etc ...

    Voilà, j'espère que ça t'aide !

  3. #3
    Membre actif Avatar de a.snaps
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 209
    Points : 241
    Points
    241
    Par défaut
    Je pense comme chtig que le design de ton modèle est incorrecte.
    Je pense que qu'une relation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ---------------  1             --------
    | Utilisateur |--------------->| Role |
    ---------------          1..*  --------
    est la solution à ton problème...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    En effet, apres qulques heures de reflexion je susi arrivee a la meme conclusion que vous : erreur de modelisation

    J'ai donc adopte ta solution en l'adaptant quelques peu a mes besoin

    --------------- 1 --------
    | Utilisateur |--------------->| Role |
    --------------- 1..* --------

    avec mes types d'utilisateurs qui herite de la classe Role
    Et la ca marhe


    Merci pour votre aide

Discussions similaires

  1. Problème de formulaire avec des If-Else
    Par MasterChief78 dans le forum Access
    Réponses: 21
    Dernier message: 29/08/2006, 12h54
  2. Petit problemes de variables avec des Packages
    Par Invité dans le forum Modules
    Réponses: 4
    Dernier message: 02/08/2006, 17h08
  3. probleme d'heritage sur des chaines de caracteres
    Par pikiwiki dans le forum C++
    Réponses: 3
    Dernier message: 24/05/2006, 21h01
  4. Probleme de boucle avec des processus sous UNIX
    Par sebastieng dans le forum POSIX
    Réponses: 6
    Dernier message: 15/10/2005, 18h57
  5. Réponses: 6
    Dernier message: 04/04/2003, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo