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 :

Héritage et Hibernate


Sujet :

Hibernate Java

  1. #1
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut Héritage et Hibernate
    Bonjour,

    Je voudrais faire de l'héritage pour utiliser une classe pour 5 vues qui ont toutes les mêmes colonnes.
    Comment peut ont le faire??

    ou y'a til une autre solution pour utiliser une classe pour plusieurs tables.

    Merci.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Non, en hibernante a partit d'une classe tu dois toujours pourvoir trouver la table, donc une classe donnée ne peux pas etre mappée sur 5 tables différentes. Par contre, pour te faciliter la tache rien ne t'empeche de faire une classe "abstract" avec toutes tes propriétés, puis de dériver autant de sous classe qu'il n'y a de vues et mapper individuellement chaque vue:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public abstract class SupportClass{
     // toutes les propriétés
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class Vue1 extends SupportClass{
      // rien
    }
    puis dans le mapping tu peux aussi utiliser le mapping "héritage avec une table par classe concrete"

    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
    17
    <class name="Payment">
        <id name="id" type="long" column="PAYMENT_ID">
            <generator class="sequence"/>
        </id>
        <property name="amount" column="AMOUNT"/>
        ...
        <union-subclass name="CreditCardPayment" table="CREDIT_PAYMENT">
            <property name="creditCardType" column="CCTYPE"/>
            ...
        </union-subclass>
        <union-subclass name="CashPayment" table="CASH_PAYMENT">
            ...
        </union-subclass>
        <union-subclass name="ChequePayment" table="CHEQUE_PAYMENT">
            ...
        </union-subclass>
    </class>
    dans ton cas comme les fils ne seornt pas différenciés (même colonne), toutes tes propriétés seront mises dans le parent. Avec union-sublass, le parent n'a pas de table propre, ce qui est ce que tu cherche il me semble

  3. #3
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    ouii à peu prés, j'ai essayé ça mais la recherche se fait toujours sur la classe Payment; comment lui dire de chercher sur CashPayment ou sur CardPayment? j'ai aussi rencontré un problème avec l'id, peu être que j'ai testé rapidement sans prendre le temps de bien faire les choses..

    J'ai trouvé une solution rapide sans toucher au hbm pour l'instant:

    Créer une interface, les classes des vues implémentent cette interface, ensuite, j'utilise que l'interface pour le résultats des requêtes sur toutes les vues.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    ouii à peu prés, j'ai essayé ça mais la recherche se fait toujours sur la classe Payment; comment lui dire de chercher sur CashPayment ou sur CardPayment?
    Tu veux dire qu'actuellement si tu fais un recherche
    "from CashPayement" tu obtiens aussi des objets CardPayment? J'ai un doute à cesujet. Sinon si répeter le mapping hibernante autant de fois qu'il n'y a de vues ne te dérange pas, garde le shema de classe donné et simplement fait autant de mapping qu'il n'y a de sous classe et pas de mapping pour le parent. Hibernante s'en fous de l'héritag tant que t'essaie pas de mapper cetter héritage

  5. #5
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Tu veux dire qu'actuellement si tu fais un recherche
    "from CashPayement" tu obtiens aussi des objets CardPayment? J'ai un doute à cesujet. Sinon si répeter le mapping hibernante autant de fois qu'il n'y a de vues ne te dérange pas, garde le shema de classe donné et simplement fait autant de mapping qu'il n'y a de sous classe et pas de mapping pour le parent. Hibernante s'en fous de l'héritag tant que t'essaie pas de mapper cetter héritage
    Non j'utilise la recherche par Criteria..Si je me souviens bien de ce que j'ai eu: la requete ressemble à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select Paypement
    from  (select CashPayment) ..

    Je re teste avec les union-subclass et je je tiens au courant

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    C'est bon ça marche, j'avais un problème de mapping au début qui n'a rien à voir avec l'héritage.

    merciii tchize_ .

    @++

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

Discussions similaires

  1. Stratégies de mapping d'héritage avec Hibernate / JPA
    Par Ricky81 dans le forum Persistance des données
    Réponses: 10
    Dernier message: 21/06/2010, 11h58
  2. Héritage dans hibernate
    Par henpower dans le forum Hibernate
    Réponses: 2
    Dernier message: 08/10/2009, 11h04
  3. Réponses: 0
    Dernier message: 04/10/2009, 16h19
  4. [Héritage] Subclass hibernate
    Par Thomas_ats dans le forum Hibernate
    Réponses: 1
    Dernier message: 26/01/2009, 20h59
  5. [Héritage et Hibernate]
    Par kamaldev dans le forum Hibernate
    Réponses: 2
    Dernier message: 14/05/2008, 15h00

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