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 polymorphisme


Sujet :

Hibernate Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 13
    Points : 8
    Points
    8
    Par défaut héritage et polymorphisme
    Bonjour,

    J'ai commencé à travailler comme ça :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
    @MappedSuperclass 
    public abstract class A { 
    ...
    }
     
    @MappedSuperclass 
    public abstract class B extends A {
    ...
    }
     
    @MappedSuperclass 
    public abstract class C extends A {
    ...
    }
     
    @Entity
    public class D extends B {
    ...
    }
     
    @Entity
    public class E extends C {
    ...
    }
    J'ai ainsi pu profiter du polymorphisme et faire des requetes me permettant de retrouver tous les A ou tous les E etc.

    Ensuite j'ai voulu créer une autre classe, comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @Entity 
    public class F { 
     
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
     
    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    @JoinColumn(name = "A_ID", nullable = false) 
    private A aItem;
    ...
    }
    Comme A est abstraite, j'ai du la modifier comme suit car Hibernate demande une entité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    @Entity
    @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
    @MappedSuperclass 
    public abstract class A { 
     
    @Id 
    private String id; 
     
    @OneToMany(cascade = CascadeType.ALL,  mappedBy = "aItem", fetch = FetchType.LAZY ) 
    @JoinColumn(name = "A_ID", nullable = false) 
    private List<A> aList;
    ...
    }
    Si je persiste une instance de F, Hibernate fait une insertion dans la nouvelle table A (avant on avait pas d'entité) et une insertion dans la table F. Jusqu'ici, tout va bien. Sauf que maintenant quand j'essaye de remonter tous les A, Hibernate va chercher aussi dans la table A ! Du coup, il me renvoie l'exception suivante :
    org.hibernate.InstantiationException: Cannot instantiate abstract class or interface: com.app.A
    Je comprend pourquoi mais du coup je ne sais pas comment m'en sortir. J'ai pensé à passer de InheritanceType.TABLE_PER_CLASS à InheritanceType.JOINED mais ce n'est pas la stratégie d'héritage qui me plait le plus. Quelqu'un a une idée ? je sèche.

    Merci d'avance.
    JM.

  2. #2
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 13
    Points : 8
    Points
    8
    Par défaut suite
    Bon, j'ai testé, avec la strategie JOINED, tout fonctionne.
    Par contre en terme de performances, c'est désastreux car on multiplie le nombre de left outer join par le nombre de subclass. Donc je réitère ma question, comment faire la même chose avec table_per_class ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 13
    Points : 8
    Points
    8
    Par défaut j'ai trouvé
    Comme personne ne me répond jamais sur ce forum,
    J'ai cherché comme d'habitude et j'ai trouvé comme tout faire fonctionner avec TABLE_PER_CLASS comme je le voulais.
    Si ça interesse quelqu'un, il peut me contacter sans prob.
    JM.

  4. #4
    Membre actif Avatar de Roy Miro
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 273
    Points : 290
    Points
    290
    Par défaut
    Salut,

    Tu pourrais poster ta solution stp?
    Merci beacoup

    Ps: ne pas oublier le tag "résolu"

Discussions similaires

  1. Template, héritage et polymorphisme
    Par PtitFrancesco dans le forum Langage
    Réponses: 5
    Dernier message: 08/09/2009, 21h35
  2. Réponses: 10
    Dernier message: 17/07/2008, 20h01
  3. héritage et polymorphisme
    Par davdou dans le forum JSF
    Réponses: 2
    Dernier message: 23/11/2007, 09h51
  4. [C#] Information sur héritage et polymorphisme
    Par LE NEINDRE dans le forum C#
    Réponses: 21
    Dernier message: 14/06/2007, 11h00
  5. Réponses: 19
    Dernier message: 05/06/2007, 08h13

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