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 :

mapping de deux one-to-many


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 28
    Par défaut mapping de deux one-to-many
    Je n'ai pas vraiment vu tous les post alors si ma question a déjà été posé, merci de me redirigé.

    Ma question est plutot un conseil.

    J'ai une classe A qui a deux ensembles (ens 1 et ens 2) de la classe B. un élément de l'ens 1 ne peut appartenir l'ens 2 et inversement.
    Au niveau du modele relationnel j'ai deux tables.
    Comment mapperiez vous ca vous dans ce cas?

  2. #2
    Membre expérimenté Avatar de xv-mnt
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 142
    Par défaut
    Tu pourrais sous-classer ta classe B en 2 sous-classes B1 et B2, pour l'ensemble 1 et l'ensemble 2 respectivement, avec une stratégie d'héritage de 1 table par hiérarchie.
    Une contrainte, ajouter une colonne supplémentaire pour faire la discrimination entre les 2 types de classes.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 28
    Par défaut
    effectivement j'y avais pensé. Mais je voudrais éviter !!! J'aimerais garder le modèle objet tel que je l'ai décris. J'aimerais que la solution vienne du mapping (par contre je me doute qu'il va falloir rajouter une colonne dans ma table B pour les différencier)

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Tu pourrais rajouter une colonne dans ta table B pour identifier tes ensembles.
    Dans ton mapping de A, dans la définition de tes Set, tu pourrais rajouter l'attribut "where" afin de récupérer les objets de B en fonction de la nouvelle propriété.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Par défaut
    Citation Envoyé par xv-mnt
    Tu pourrais sous-classer ta classe B en 2 sous-classes B1 et B2, pour l'ensemble 1 et l'ensemble 2 respectivement, avec une stratégie d'héritage de 1 table par hiérarchie.
    Une contrainte, ajouter une colonne supplémentaire pour faire la discrimination entre les 2 types de classes.
    Je pencherais aussi pour une solution d'héritage de la classe B, mais par contre, pour la stratégie de mapping ce serait 1 table par sous-classe, sans colonne supplémentaire pour la discrimination. En principe, en l'absence de discriminator, Hibernate outilise la réflexion pour assurer le mapping dans ce cas. Pour définir les deux ensembles, la classe A aurait deux relations one-to-many directement avec chacune des sous-classes et non avec la classe de base.

  6. #6
    Membre expérimenté Avatar de xv-mnt
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 142
    Par défaut
    effectivement j'y avais pensé. Mais je voudrais éviter !!! J'aimerais garder le modèle objet tel que je l'ai décris.
    Question : pourquoi veux-tu éviter de modifier le modele objet en sous-classant B avec B1 et B2 ?

    Pour moi, il me semble plus contraignant de modifier les tables, car le schéma peut parfois nous être imposé de l'extérieur (le modèle est existant et figé par exemple car déjà en prod.).

    De plus, rien ne t'empeche de travailler ensuite directement avec la superclasse.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 28
    Par défaut
    Tout d'abord merci pour vos réponses pertinentes!

    Si j'utilise une hiérarchie au niveau objet, je suis obligé de changer également mon modele relationnel (2 tables pas sous-classe), car la solution une table par hiérarchie n'est pas satisfaisant à mon gout et ne permet pas vraiment le polymorphisme (voir livre hibernate 3)
    De ce fait la clause "where" me parait une bonne idée. Je ne connais pas vraiment comment ca marche (j'en ai une idée) il faudrait que je renseigne.

  8. #8
    Membre expérimenté Avatar de xv-mnt
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 142
    Par défaut
    La question n'est pas de faire du polymorphisme pour faire du polymorphisme, mais de répondre (élégamment à mon goût) à une problématique posée.
    De plus, dans certains cas, avoir une seule table par hiérarchie permet d'éviter les requêtes de jointures dans certains cas limites : gros volumes + beaucoup d'attributs en commun.
    De toute manière, tu as qd même pas mal de solutions à ton pb

    @+

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Par défaut
    Citation Envoyé par emilie_caroline
    Si j'utilise une hiérarchie au niveau objet, je suis obligé de changer également mon modele relationnel (2 tables pas sous-classe), car la solution une table par hiérarchie n'est pas satisfaisant à mon gout et ne permet pas vraiment le polymorphisme (voir livre hibernate 3)
    Quelques questions s'imposent :
    1. Le schéma de la base de données t'es imposé ou tu en as le contrôle et donc la possibilité de modifier les tables ?
    2. Les deux fameuses tables contiennent-elles des données exactement du même type ou y a-t-il des champs qui diffèrent ?
    3. Peux-tu poster une partie du code de la classe A et ses références à la classe B (histoire de voir s'il y a moyen de faire autrement) ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mapping one-to-many - saveOrUpdate
    Par -=mateo=- dans le forum Hibernate
    Réponses: 4
    Dernier message: 15/07/2010, 17h36
  2. [MAPPING] one-to-one et many-to-many
    Par Invité dans le forum Hibernate
    Réponses: 10
    Dernier message: 09/03/2010, 14h53
  3. Mapping de relations one-to-many et inverse
    Par Invité dans le forum Hibernate
    Réponses: 11
    Dernier message: 08/04/2008, 16h41
  4. Mapping One to Many
    Par Ethylene dans le forum Hibernate
    Réponses: 9
    Dernier message: 25/09/2007, 16h42
  5. [Hibernate] Mapping one-to-many + cle composite
    Par brainstorm dans le forum Hibernate
    Réponses: 2
    Dernier message: 23/06/2006, 10h51

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