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 :

Les différences de @One-to-Many relation et @ElementCollection


Sujet :

Hibernate Java

  1. #1
    Nouveau membre du Club

    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 49
    Points : 38
    Points
    38
    Billets dans le blog
    1
    Par défaut Les différences de @One-to-Many relation et @ElementCollection
    Bonjour les amis

    Quelles sont les différences de @One-to-Many relation et @ElementCollection ?

    Merci

  2. #2
    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
    Bonjour,

    Je ne connaissais pas ce nouveau concept, mais je viens de fouiller un peu et fait quelques tests et je trouve cela super intéressant. En fait tu peux mapper une entité avec une liste d'objets basiques ou même primitifs.
    Donc pour répondre à ta question le @ElementCollection est un ensemble beaucoup plus grand que le @OneToMany, pendant que le @OneToMany se limite aux entités (ou aux enregistrements), le @ElementCollection peut se mapper sur tout ou partie d'une table. C'est très bien expliqué dans ce wiki.
    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..."

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Il y a une différence de taille au niveau de la "cascade".
    Pour ElementCollection, c'est systématiquement persisté avec l'entity porteur.
    Avec la relation @OneToMany, on peut persister de manière plus fine...

    Sinon, ça semble très intéressant dans certains cas, je ne connaissais pas...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 230
    Points : 104
    Points
    104
    Par défaut
    En regardant le wiki indiquée par DevServlet, j'ai du mal à voir la différence avec ce code que je faisais il y a encore quelques temps qd j'utilisais les fichiers hbm pour le mapping de mes entités :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <list name="answers" table="answersdb">  
         <key column="qid"></key>  
         <index column="type"></index>  
         <element column="answer" type="string"></element>  
     </list>
    avec le code mentionné avec le wiki
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <element-collection nam
                <column name="PHONE_NUMBER"/>
                <collection-table name="PHONE">
                    <join-column name="OWNER_ID"/>
                </collection-table>
            </element-collection>
    merci d'éclairer ma lanterne

  5. #5
    Nouveau membre du Club

    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 49
    Points : 38
    Points
    38
    Billets dans le blog
    1
    Par défaut Réponse Element Collection
    Bonjour,
    @ElementCollection

    L'annotation ElementCollection offre des facilités pour la persistence des listes de types primitifs ou de types de base de Java comme Integer ou String.
    Auparavant, pour persister une liste de String par exemple, il était nécessaire de persister sous forme de Blob un objet sérialisé contenant les valeurs à enregistrer, cet objet pouvant être une ArrayList ou un HashSet par exemple . Le "probleme" venant du fait que le type String n'étant pas une entité JPA, il ne pouvait être mappé avec un traditionnel @ManyToOne ou @ManyToMany. Un autre contournement possible était de créer une entité JPA comprenant uniquement le String à persister entant qu'attribut et éventuellement une clé technique. Créer une telle table parait logique si on analyse le problème d'un point de vue relationnel, par contre d'un point de vue objet il est dommage d'avoir à s'encombrer d'une telle classe.
    Heureusement avec JPA 2 et l'annotation ElementCollection , ce genre de mapping devient beaucoup plus naturel.

    Cette annotation s'utilise comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @ElementCollection  
    @CollectionTable(name = "nom")  
    @Column(name = "value")  
    List<String> noms;
    En utilisant cette annotation, une table comprenant une clé technique + la valeur à enregistrer pour chaque String sera créee automatiquement et utilisée de manière transparente. JPA fait donc bien son travail : s'occuper des problématiques de stockage des données dans le modèle relationnel, en laissant le développeur créer un modèle cohérent d'un point de vue objet.

    L'annotation Column permet de spécifier le nom de la colonne qui contiendra les valeurs (des String dans notre exemple) à persister.
    Enfin, l'annotation CollectionTable permet de spécifier le nom de la table à générer pour stocker ces valeurs.

    Les annotation Column et CollectionTable sont optionnelles, si elles ne sont pas présentes des valeurs par défauts seront utilisées pour les noms de tables et de colonnes.

Discussions similaires

  1. Relation one-to-many qui ne se crée pas
    Par Julien G dans le forum Hibernate
    Réponses: 4
    Dernier message: 01/08/2007, 18h02
  2. Réponses: 4
    Dernier message: 18/06/2007, 08h30
  3. [Hibernate] Relation one to many
    Par BRAUKRIS dans le forum Hibernate
    Réponses: 2
    Dernier message: 23/08/2006, 11h51
  4. [hibernate] relation one-to-many avec plusieurs clés
    Par seb_fou dans le forum Hibernate
    Réponses: 6
    Dernier message: 16/03/2006, 14h47
  5. [EJB2.1 Entity] [CMR] Relation One to Many
    Par hamed dans le forum Java EE
    Réponses: 2
    Dernier message: 31/12/2003, 14h26

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