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 :

Persistance des entités en relation


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Par défaut Persistance des entités en relation
    Je suis débutant en JPA en j'ai un petit problème de persistence des entités en relation pourtant je fais bien la persistence des entités séparément.
    J’ai les entités Classroom, Students et Parents.
    Students 1------n Parents
    Classroom 1------n Students

    Entité Students

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    @Entity
    @Table(name="students")
    public class Students implements Serializable {
    private static final long serialVersionUID = 1L;
     
         @Id
          @GeneratedValue(strategy=GenerationType.AUTO)
     
          @Column(name="MatEtudiant")
          private int matEtudiant;
     
          @Column(name="Adresse")
          private String adresse;
     
          @Column(name="Email")
          private String email;
     
          @Column(name="NomPrenom")
          private String nomPrenom;
     
          //bi-directional many-to-one association to EpgClasse
     
          @ManyToOne
          @JoinColumn(name="IdClasse")
          private Classroom classroom;
     
          //bi-directional many-to-one association to EpgParent
          @OneToMany(mappedBy="students")
          private Set<Parents> parents;
     
          public Students() {
     
          }
     
          //setters getters 
     
    }
    Maintenant le problème se pose lorsqu’il faut affecter les valeurs pour persister l’entité Students.

    Je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Students stud = new Students();
     
    stud.setMatEtudiant(124750);
    stud.setAdresse("Yaounde Camerooun");
    stud.setEmail("bouanda@gamil.com");
    stud.setNomPrenom("Bouanda Abraham Messina");
    Voici le problème : Comment affecter la valeur de IdClasse (qui est l'identifiant de la classe, puisque en enregistrant l'étudiant, on doit avoir sa classe)
    J’ai le même problème pour les relations @ManyToMany

    Merci de votre aide

  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
    Par défaut
    Bonne question, justement oublie le fonctionnement natif sql de base, ce n'est pas à toi de faire cette persistence, tu as justement laissé la charge à JPA de le faire en effectuant ton mapping ORM. Pense "Objet" désormais , fini le relationnel, il faut avant de persister ton eleve faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monObjetStudent.setClassRomm(laReferenceDeLaClassRomm)
    Sachant que préalablement cet objet Classroom existe deja physiquement dans la base, et pas seulement en mémoire.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Par défaut
    OK, merci beaucoup.
    Lorsque tu dis que
    il faut avant de persister ton eleve faire : monObjetStudent.setClassRomm(laReferenceDeLaClassRomm) Sachant que préalablement cet objet Classroom existe deja physiquement dans la base, et pas seulement en mémoire.
    Donc je devrais créer une référence de Classroom sachant par exemple que j'ai un IdClasse="00020" dans ma base de données, je lui affecte seulement cet IdClasse avant de le passer à étudiant ou j'affecte aussi tous les autres attributs de l'objet ?

    Je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Classroom cls = new Classroom(); 
    cls.setIdClasse("00020");
    
    monObjetStudent.setClassRomm(cls);

    Ou alors j'affecte toutes les valeurs ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Classroom cls = new Classroom(); 
    cls.setIdClasse("00020");
    cls.setLibelle("Terminale");
    cls.setCapacite(50);
    
    monObjetStudent.setClassRomm(cls);
    Merci

  4. #4
    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
    Par défaut
    Citation Envoyé par mesken Voir le message
    OK, merci beaucoup.
    Lorsque tu dis que

    Donc je devrais créer une référence de Classroom sachant par exemple que j'ai un IdClasse="00020" dans ma base de données, je lui affecte seulement cet IdClasse avant de le passer à étudiant ou j'affecte aussi tous les autres attributs de l'objet ?

    Je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Classroom cls = new Classroom(); 
    cls.setIdClasse("00020");
    Classroom cls = tonEntityManager.findById("tonIdClassRoom"); 
    monObjetStudent.setClassRomm(cls);
    [B][COLOR="Blue"]


    monObjetStudent.setClassRomm(cls); [/code]

    Merci

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Par défaut
    Merci beaucoup DevServlet. Une dernière question STP.
    Quand est-il des relations ManyToMany, il me génère des sets du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Set<Classroom> classroom;
    comment gérer ça dans le même ordre d'idée ?

    J'ai par exemple une classe (Classroom entity) qui a plusieurs enseignants) et un enseignant (Enseignant entity) qui enseigne dans plusieurs classes et j'ai une table intermédiaire qui s'appelle affection_matiere.

    Merci

  6. #6
    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
    Par défaut
    Même principe

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/02/2013, 13h22
  2. Persistance des objets en relation
    Par mesken dans le forum Java EE
    Réponses: 0
    Dernier message: 22/04/2011, 18h36
  3. Réponses: 12
    Dernier message: 27/05/2010, 20h01
  4. Réponses: 2
    Dernier message: 29/04/2009, 18h58
  5. [MSXML] Comment empécher la conversion des entités ?
    Par nima dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/11/2002, 14h14

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