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 :

ManyToMany modification du contenu d'un set


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut ManyToMany modification du contenu d'un set
    J'ai un comportement extrêmement bizzard lorsque j'ajoute un élément à un Set dans une relation manyToMany

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	/** The adresse of the personne.  */
    	@ManyToMany(fetch = FetchType.EAGER)
    	@Cascade((org.hibernate.annotations.CascadeType.SAVE_UPDATE))
    	private Set<Adresse> adresses;
    j'ai mon getter / setter sur mon set et j'ai également une méthode qui me permet d'ajouter à la collection une nouvelle entité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void addAdresse(Adresse adresse) {
    		Iterator<Adresse> iterator = this.getAdresses().iterator();
    		Set<Adresse> newSet = new HashSet<Adresse>();
    		newSet.add(adresse);
    		while (iterator.hasNext()) {
    			if (!newSet.contains(iterator.next())) {
    				newSet.add(iterator.next());
    			}
    		}		
    		this.setAdresses(newSet);
    	}
    Le problème que je rencontre est lorsque je fais le getAdresses() le set récupéré ne contient que la nouvelle adresse. Je ne fais aucun autre appel en modification à ce Set.

    Une idée ?

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ici:
    tu fais deux fois appel à iterator.next()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    			if (!newSet.contains(iterator.next())) {
    				newSet.add(iterator.next());
    			}
    Donc ce code reviens à dire en pseudo code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    si newSet ne contient pas l'élément x
      alors y stocker l'élément x+1
    de plus l'ensemble du code de la fonction pourrait avantageusement etre remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void addAdresse(Adresse adresse) {
    		this.getAdresses().add(adresse);
    	}

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    C'est ce que j'avais fait initialement mais j'ai toujours le même problème. La méthode selectedBeneficiaire.getAdresses(); me renvoye un set qui contient déjà les valeurs modifier avant même que j'y ajoute ma nouvelle adresse

    Dans ce cas si j'ai bien un Set qui contient deux Adresse mais celles-ci sont identiques.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Est-ce que ta classe Adresse implemente correctement equals et hashcode? Un set permet justement d'éviter les doublons.

    Et j'ai pas trop compris ta phrase là:
    La méthode selectedBeneficiaire.getAdresses(); me renvoye un set qui contient déjà les valeurs modifier avant même que j'y ajoute ma nouvelle adresse
    de quelle valeur tu parle, comment tu crée ta nouvelle adresse avant de l'ajouter?

Discussions similaires

  1. [COMBOBOX]Bloquer la modification du contenu
    Par stephane77fr dans le forum Windows Forms
    Réponses: 4
    Dernier message: 15/07/2007, 12h01
  2. Modification du contenu d'une page d'un repertoire virtuel
    Par celine_tr dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 24/08/2006, 16h17
  3. Réponses: 2
    Dernier message: 28/12/2005, 16h53
  4. [vb6 et access] problème de modification de contenu de champ
    Par dj_tess dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 22/12/2005, 19h26
  5. Modification du contenu d'un Request() ??
    Par Invité dans le forum ASP
    Réponses: 5
    Dernier message: 05/07/2005, 14h31

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