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 :

Modifier un attribut représentant une autre classe


Sujet :

Hibernate Java

  1. #1
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    726
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 726
    Points : 266
    Points
    266
    Par défaut Modifier un attribut représentant une autre classe
    J'ai une entité ProjectIdea qui peut avoir plusieurs genres.
    J'ai donc deux classes qui possedent chacunes un attribut annoté ManyToMany qui représente la liste des objets avec lesquels ils sont reliés.

    voici le code simplifié.

    Classe ProjectIdea
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      protected Set<IdeaKind> ideaKinds;
        @ManyToMany
        public Set<IdeaKind> getIdeaKinds() {
            return ideaKinds;
        }
        public void setIdeaKinds(Set<IdeaKind> ideaKinds) {
            this.ideaKinds = ideaKinds;
        }
    Classe IdeaKind (genre de l'idée)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private Set<ProjectIdea> projectIdeas;
        @ManyToMany(mappedBy = "ideaKinds")
        public Set<ProjectIdea> getProjectIdeas() {
        return projectIdeas;
        }  
        public void setProjectIdeas(Set<ProjectIdea> projectIdeas) {
        this.projectIdeas = projectIdeas;
        }
    J'aimerai ajouter une "ideaKind" a un "ProjectIdea". J'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      ProjectIdea pi = (ProjectIdea)(em.find(ProjectIdea.class, Long.parseLong("1")));//je récupere celui d'id=1
                em.persist(pi);
     
                IdeaKind ik = (IdeaKind)(em.find(IdeaKind.class, Long.parseLong("1")));//je récupere celui d'id=1
                em.persist(ik);
     
                pi.getIdeaKinds().add(ik);
    Seulement cela n'a aucun effet sur ma table générée automatiquement et qui représente la jointure entre les ProjectIdea et les IdeaKind.

    Comment cela se fait il ?

    P.S: j'ai le meme probleme avec une relation OneToMany et ManyToOne

  2. #2
    Membre actif Avatar de mOuLi
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Points : 257
    Points
    257
    Par défaut
    A première vue, j'ai l'impression que tu "persistes" tes objets avant de les associer et donc ça me paraît normal que ta relation n'apparaîsse pas en base.

    Le plus simple serait peut-être d'utiliser les mécanismes de cascade Hibernate (voir le paragraphe "10.11 Persistance transitive" dans la documentation de référence Hibernate).

  3. #3
    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
    Non je pense pas que ce soit cà le pb, voila 2 choses parmi lesquelles un doit marcher
    * Apres cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     pi.getIdeaKinds().add(ik);
    tu dois faire un flush sur l'entité détachée
    ou
    * A la place du "find"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IdeaKind ik = (IdeaKind)(em.find(IdeaKind.class, Long.parseLong("1")));
    tu fais simplement une requete d'extraction (Select), j'ai déjà rencontré ce genre de pb je crois bien.
    Essaie et redis moi.
    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..."

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    726
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 726
    Points : 266
    Points
    266
    Par défaut
    J'y suis arrivé.
    En fait je persiste juste pi a la fin et je termine par un commit.

    Mais peut etre n'est ce pas une bonne solution ....

  5. #5
    Membre actif Avatar de mOuLi
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Points : 257
    Points
    257
    Par défaut
    Je pense que c'est la bonne solution

    Puisque tu n'utilises pas les cascades Hibernate, il faut que tu persistes tes objets individuellement, ensuite tu les associes et enfin tu repersistes (pour créer l'association) pour finaliser tout ça.
    Avec les cascades, tu pourrais faire tout ça en un seul 'persist' mais ça demande plus d'efforts sur le mapping.

  6. #6
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    726
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 726
    Points : 266
    Points
    266
    Par défaut
    Et est ce vraiment compliqué de mapper ses relations en cascade?

    merci

  7. #7
    Membre confirmé Avatar de JoloKossovar
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 532
    Points : 576
    Points
    576
    Par défaut
    Non piotr, la doc d hibernate existe en francais en plus

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

Discussions similaires

  1. Modifier un bouton depuis une autre classe
    Par MrShanky dans le forum Général Java
    Réponses: 2
    Dernier message: 12/06/2014, 15h29
  2. Accès aux attributs d'une autre classe
    Par alexmam15 dans le forum Débuter
    Réponses: 5
    Dernier message: 25/02/2011, 09h26
  3. Réponses: 1
    Dernier message: 14/08/2009, 08h50
  4. Réponses: 3
    Dernier message: 23/05/2009, 18h57

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