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

Persistance des données Java Discussion :

Stratégies de mapping d'héritage avec Hibernate / JPA [Tutoriel]


Sujet :

Persistance des données Java

  1. #1
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut Stratégies de mapping d'héritage avec Hibernate / JPA
    Bonjour,

    Gérald Quintana (Objet Direct) vous propose un article sur la problématique de mapping Objet / Relationnel d'héritages :

    L'héritage est une des notions fondamentales de la programmation orientée objet. La plupart des bases de données relationnelles ne connaissent pas cette notion. Nous allons voir dans cet article comment Hibernate essaye de faire le grand écart entre le monde objet et le monde relationnel.
    Si vous avez des commentaires / remarques, profitez de ce fil de discussion.

  2. #2
    Membre confirmé
    Avatar de Khaled.Noordin
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 354
    Points : 497
    Points
    497
    Billets dans le blog
    1
    Par défaut
    @ Gérald Quintana
    super, merci

  3. #3
    Membre averti Avatar de clubist
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 217
    Points : 301
    Points
    301
    Par défaut
    Bonjour,

    merci beaucoup pour ce tutoriel.

    j'ai un petit souci concernant la deuxième stratégie: Une table par classe concrète.

    Pourquoi on a ajouté un champ DTYPE VARCHAR(255) dans chacune des deux tables : voiture et camion alors qu'on sait d'avant la nature d'objet( type de véhicule ) qui sera persisté(ou n'importe autre opération CRUD) dans un de ces tables ?

    et merci d'avance.

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Citation Envoyé par clubist Voir le message

    Pourquoi on a ajouté un champ DTYPE VARCHAR(255) dans chacune des deux tables : voiture et camion alors qu'on sait d'avant la nature d'objet( type de véhicule ) qui sera persisté(ou n'importe autre opération CRUD) dans un de ces tables ?
    C'est une erreur sur le MPD, la colonne est effectivement inutile. D'ailleurs elle n'apparaît pas dans les ordres INSERT.

  5. #5
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Merci pour ce lien, il est très intuitif.
    Seulement je ne suis pas très d'accord avec :
    C'est une erreur sur le MPD, la colonne est effectivement inutile. D'ailleurs elle n'apparaît pas dans les ordres INSERT.
    T'as bien ce DTYPE dans ces instructions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO Vehicule (immatriculation, nbPortes, DTYPE, id) VALUES ('1234AB', 5, 'Voiture', 1)
    A moins qu'on ne se comprenne pas, c'est une colonne obligatoire pour Hibernate, puisque t'as une table par hiérarchie d'héritage, Hibernate n'a pas d'autre moyen de distinguer les tables filles, non ?
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Tu me parlais de la stratégie "Une table par classe concrète."
    Or là tu fais référence à un INSERT sur la table Vehicule qui n'a pas d'existence dans cette stratégie.

  7. #7
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Moi je parle bien du paragraphe I-2, une seule table par hiérarchie d'heritage, dans la classe Vehicule, Hibernate migrera toutes les colonnes des classes filles et y ajoutera une colonne de distinction. Je ne parle pas du tout du 2e mecanisme d'heritage.
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Moi je parle bien du paragraphe I-2, une seule table par hiérarchie d'heritage, dans la classe Vehicule, Hibernate migrera toutes les colonnes des classes filles et y ajoutera une colonne de distinction. Je ne parle pas du tout du 2e mecanisme d'heritage.
    La personne à laquelle j'ai initialement répondu parlais bien du 2ème mécanisme d'héritage.

  9. #9
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Exact , autant pour moi.
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  10. #10
    Membre confirmé
    Avatar de Khaled.Noordin
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 354
    Points : 497
    Points
    497
    Billets dans le blog
    1
    Par défaut
    Il aurait été intéressant d'avoir le coté sql des créations de tables pour chaque stratégie.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 156
    Points
    156
    Par défaut
    Bonjour,

    Petite question dans le cas de la stratégie une seule table.
    Si l'on fait un getAll() sur la classe Véhicule on récupère donc une liste d'objet Vehicule.
    Mais ceux-ci, au sein de la liste, sont-il en fait typés plus fortement en Voiture et Camion ou bien faut-il aller chercher tour à tour un getAll() sur Voiture puis sur Camion pour avoir l'ensemble, fortement typé ?

Discussions similaires

  1. Problème de requête avec Hibernate (JPA)
    Par flamant dans le forum Hibernate
    Réponses: 3
    Dernier message: 16/03/2012, 09h17
  2. Mapping Objet-Relationel avec JPA :héritage
    Par ahmeddrira dans le forum Frameworks Web
    Réponses: 3
    Dernier message: 06/03/2012, 17h12
  3. Réponses: 0
    Dernier message: 04/10/2009, 16h19
  4. [débutant]problème avec Hibernate/JPA
    Par amnass dans le forum JPA
    Réponses: 5
    Dernier message: 19/05/2009, 15h02
  5. probleme avec le mapping d'association avec hibernate
    Par senediene dans le forum Hibernate
    Réponses: 2
    Dernier message: 10/08/2006, 13h59

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