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 :

[hibernate] mapping avec interface


Sujet :

Hibernate Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 100
    Points : 90
    Points
    90
    Par défaut [hibernate] mapping avec interface
    Bonjour,

    J'utilise hibernate 3 dans mon application. Et je fais le mapping avec les annotations java.

    Je suis face à un problème de conception.

    Dans ma base de données, j'ai la table :
    - individu

    Et les tables :
    - homme, femme
    - enfant, adulte
    qui ont toutes une clé étrangère référençant id_individu

    En clair : un individu est soit une femme, soit un homme
    et soit un enfant soit un adulte.

    Pour représenter cette relation en programmation objet, je veux utiliser le pattern strategie.

    C'est à dire :
    - Individu est une classe abstraite
    - Homme et Femme sont des classes qui héritent d'individu
    - Une interface IEnfantOuAdulte (ou à la rigueur classe abstraite)
    - les classes Enfant et Adulte implémentent IEnfantOuAdulte
    - et Individu encapsule un objet de type IEnfantOuAdulte (relation oneToOne)

    Ce qui me pose problème c'est cette interface que je ne sais pas annoter avec Hibernate...

    Savez-vous si c'est possible ?

    (Je sais qu'il y a d'autres solutions de conception sans utiliser l'interface, mais j'y tiens beaucoup)

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 383
    Points : 468
    Points
    468
    Par défaut
    Il s'agit de mapper une relation d'héritage.
    Il y a plusieurs stratégies en fonction du nombre de tables que tu as :
    http://www.hibernate.org/hib_docs/re...heritance.html

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 100
    Points : 90
    Points
    90
    Par défaut
    Merci, mais ce n'est pas de l'héritage que je veux faire.

    Je veux utiliser une interface pour découpler la relation entre la classe Individu et les classes Enfant et Adulte. Comme dans le design pattern Stratégie.

    Le problème c'est que l'interface ne correspond à aucune table de la base de données. Et je voulais savoir si il était possible de mapper cette relation avec hibernate :

    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
     
    public interface IEnfantOuAdulte {...}
     
    @Entity
    public class Enfant implements IEnfantOuAdulte{...}
     
    @Entity
    public class Adulte implements IEnfantOuAdulte{...}
     
    @Entity
    public class Individu {
           @OneToOne...
           private IEnfantOuAdulte enfantOuAdulte;
           ....
    }

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 100
    Points : 90
    Points
    90
    Par défaut
    J'ai réussi.

    La classe Individu (qui correspond à la table Individu)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @Entity
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    public class Individu {...}
    La classe abstraite AEnfantOuAdulte (qui ne correspond à AUCUNE table)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    @MappedSuperclass
    public abstract class AEnfantOuAdulte {
     
        private Individu individu ;
     
        @OneToOne(cascade = CascadeType.ALL)
        @JoinColumn(name="ID_INDIVIDU")
        public Individu getIndividu () {
             return individu;
        }
        ...
        ...
    }
    Les classes Enfant (tables Enfant), la classe adulte est similaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @Entity
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    @AttributeOverride( name="individu", column = @Column(name="ID_INDIVIDU") )
    public class Enfant extends AEnfantOuAdulte {...}

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

Discussions similaires

  1. mapping RMI avec Hibernate (pb avec interfaces)
    Par jelau dans le forum Hibernate
    Réponses: 0
    Dernier message: 14/05/2011, 19h53
  2. Hibernate Mapping avec fichier jar
    Par Babas007 dans le forum Persistance des données
    Réponses: 0
    Dernier message: 10/03/2011, 13h33
  3. Probleme de mapping avec Hibernate
    Par kodo dans le forum Hibernate
    Réponses: 10
    Dernier message: 31/07/2006, 09h33
  4. Réponses: 2
    Dernier message: 17/07/2006, 14h45
  5. [hibernate] Mapping avec identifiant composé
    Par miky_jo dans le forum Hibernate
    Réponses: 3
    Dernier message: 11/10/2005, 16h48

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