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

JPA Java Discussion :

Incompréhension sur les relations 1 à plusieurs (@ManyToOne ou @OneToMany) unidirectionnelles


Sujet :

JPA Java

  1. #1
    Membre éprouvé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Par défaut Incompréhension sur les relations 1 à plusieurs (@ManyToOne ou @OneToMany) unidirectionnelles
    Bonjour,

    J’ai un collège qui a besoin de faire une relation 1 a plusieurs entre une entity Mettre (Famille d’évènement) et Esclave (Evènement)
    Voici ce qu’a fait mon collège :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @Entity
    @Table(name = "T_EVENT")
    public class EventCarrierePre implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
     
        private String codeEventPre;
        private String libelleEvent;
     
    //Getter and Setter
    }

    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
    @Table(name="T_FAMILLE_EVENT")
    @Entity
    public class FamilleEventCar implements Serializable {
        private static final long serialVersionUID = 1L;
     
        @Id
        @Column(name = "codeFam")    
        private String codeFam;
        private String libFam;
     
        @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
        @JoinColumn(name = "fam_id", referencedColumnName = "codeFam") 
        private List<EventCarrierePre> eventCarPres;
     
    //Getter and Setter
    }
    Le résultat en relationnel (d’après moi un résultat très cohérons)

    Mais d’après tous les tutoriaux que j’ai vu une relation 1 a plusieurs avec JPA crée une table de jointure entre les deux tables associées aux deux entités. Cette table de jointure porte une clé étrangère vers la clé primaire de la première table, et une clé étrangère vers la clé primaire de la deuxième table.
    Le hique c’est que je n’arrive pas à justifier cette réaction de JPA que moi-même je ne trouve pas totalement correcte.

    Il y a une phrase que je ne comprends pas dans un tutorial qui est la suivante :
    On peut ici se poser une question : pourquoi la spécification JPA prévoit-elle la création d'une table de jointure alors que la relation est de type 1:p ? La réponse est simple : parce qu'aucune information n'existe sur le champ retour, et que JPA n'a donc aucune information sur la colonne de jointure à utiliser dans la table destination. Dans le cas 1:p bidirectionnel, nous verrons que JPA ne crée pas cette table de jointure.
    Sa serais pas le contraire ? !!

    Merci de votre aide
    Images attachées Images attachées  

  2. #2
    Membre éprouvé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Par défaut
    si quelqu'un peu nous dire quelle est la différence entre les deux solution ? (et quel est la plus correcte)

    merci d'avance.

  3. #3
    Membre confirmé
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    167
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 167
    Par défaut
    Bonjour,

    bien que ce sujet date, je me permets de proposer une solution.

    D'abord, tu parles d'un tutoriel, c'est dommage de ne pas le citer (livres, URL...).

    Bon déjà, d'un premier abord, nous parlons d'une relation unilatérale puisque seul la relation enfant - parent est précisée.

    Ensuite, je dirai que le code est surprenant car tu utilises une jointure explicite entre tes deux entités en utilisant l'annotation JoinColumn. Mais tu utilises un nom différent dans la jointure et dans l'entité. Dans ton cas de figure, tu n'as pas besoin de joindre explicitement les tables. JPA le fera pour toi.

    Pour ce qui est de la structure générée, vu que nous avons un parent et des enfants, qui ont un ou plusieurs parents. Chacun des trois doit être sauvés dans sa propre table et cela est tout a fait cohérent:
    - un parent peut avoir plusieurs enfants donc une seule colonne dans la table parent ne serait pas suffisant.
    - un enfant n'a qu'un seul parent mais vu que tu as une relation unilatérale, cet enfant ne peut pas stocké l'information
    - du coup, une table de jointure sera utilisée

    Cordialement
    Jean

Discussions similaires

  1. Petite incompréhension sur les relations
    Par slacky dans le forum Microsoft Dynamics CRM
    Réponses: 1
    Dernier message: 09/08/2010, 23h26
  2. Les relations Un-à-Plusieurs
    Par seb92400 dans le forum Access
    Réponses: 6
    Dernier message: 22/09/2006, 13h44
  3. questions sur les tabs a plusieurs dimensions
    Par rosviper45 dans le forum C
    Réponses: 16
    Dernier message: 27/11/2005, 15h20
  4. Focus sur les boutons avec plusieurs formulaire
    Par davids21 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/04/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