-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: [Hibernate 3.6.9] Update d'un HashSet
PostPosted: Sun Jan 01, 2012 9:53 pm 
Newbie

Joined: Sun Jan 01, 2012 9:39 pm
Posts: 1
Bonsoir à tous !

Je découvre actuellement Hibernate et je rencontre un problème lors de la sauvegarde d'une relation many-to-many.

La relation many-to-many a lieu entre une table "Utilisateur" et une table "jeu". Voici le code de mes classes (généré via l'outils de génération de code d'Hibernate pour eclipse) :

Code:
package fr.exchangeit.model;
// Generated 30 déc. 2011 01:00:06 by Hibernate Tools 3.4.0.CR1

import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

/**
* Utilisateur generated by hbm2java
*/
@Entity
@Table(name="utilisateur", catalog="exchangeit")
@SuppressWarnings("serial")
public class Utilisateur  implements java.io.Serializable {

    private Integer id;
    private String nom;
    private String prenom;
    private String login;
    private String mdp;
    private String email;
    private String descriptif;
    private Boolean admin;
    private Set<Jeu> jeus = new HashSet<Jeu>(0);
    private Set<Jeu> jeus_1 = new HashSet<Jeu>(0);

   
    public Utilisateur() {
       
    }

    public Utilisateur(String nom, String prenom, String login, String mdp, String email, String descriptif, Boolean admin, Set<Jeu> jeus, Set<Jeu> jeus_1) {
       this.nom = nom;
       this.prenom = prenom;
       this.login = login;
       this.mdp = mdp;
       this.email = email;
       this.descriptif = descriptif;
       this.admin = admin;
       this.jeus = jeus;
       this.jeus_1 = jeus_1;
    }
   
   
    @Id
    @GeneratedValue(strategy=IDENTITY)   
    @Column(name="id", unique=true, nullable=false)
    public Integer getId() {
        return this.id;
    }
   
    public void setId(Integer id) {
        this.id = id;
    }

   
    @Column(name="nom")
    public String getNom() {
        return this.nom;
    }
   
    public void setNom(String nom) {
        this.nom = nom;
    }

   
    @Column(name="prenom")
    public String getPrenom() {
        return this.prenom;
    }
   
    public void setPrenom(String prenom) {
        this.prenom = prenom;
    }

   
    @Column(name="login")
    public String getLogin() {
        return this.login;
    }
   
    public void setLogin(String login) {
        this.login = login;
    }

   
    @Column(name="mdp")
    public String getMdp() {
        return this.mdp;
    }
   
    public void setMdp(String mdp) {
        this.mdp = mdp;
    }

   
    @Column(name="email")
    public String getEmail() {
        return this.email;
    }
   
    public void setEmail(String email) {
        this.email = email;
    }

   
    @Column(name="descriptif", length=65535)
    public String getDescriptif() {
        return this.descriptif;
    }
   
    public void setDescriptif(String descriptif) {
        this.descriptif = descriptif;
    }

   
    @Column(name="admin")
    public Boolean getAdmin() {
        return this.admin;
    }
   
    public void setAdmin(Boolean admin) {
        this.admin = admin;
    }

   
    @ManyToMany(fetch=FetchType.EAGER)
    @JoinTable(name="jeua", catalog="exchangeit", joinColumns = {
        @JoinColumn(name="utilisateura", nullable=false, updatable=false) }, inverseJoinColumns = {
        @JoinColumn(name="jeua", nullable=false, updatable=false)
    })
    public Set<Jeu> getJeus() {
        return this.jeus;
    }
   
    public void setJeus(Set<Jeu> jeus) {
        this.jeus = jeus;
    }
   

    @ManyToMany(fetch=FetchType.EAGER)
    @JoinTable(name="jeuveut", catalog="exchangeit", joinColumns = {
        @JoinColumn(name="utilisateurveut", nullable=false, updatable=false) }, inverseJoinColumns = {
        @JoinColumn(name="jeuveut", nullable=false, updatable=false)
    })
    public Set<Jeu> getJeus_1() {
        return this.jeus_1;
    }
   
    public void setJeus_1(Set<Jeu> jeus_1) {
        this.jeus_1 = jeus_1;
    }
}


Code:
package fr.exchangeit.model;
// Generated 30 déc. 2011 01:00:06 by Hibernate Tools 3.4.0.CR1


import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

/**
* Jeu generated by hbm2java
*/
@Entity
@Table(name="jeu", catalog="exchangeit")
@SuppressWarnings("serial")
public class Jeu  implements java.io.Serializable {

    private Integer id;
    private Console console;
    private Type type;
    private Studio studio;
    private String nom;
    private Integer annee;
    private String descriptif;
    private Boolean coeur;
    private String img;
    private Set<Utilisateur> utilisateurs = new HashSet<Utilisateur>(0);
    private Set<Utilisateur> utilisateurs_1 = new HashSet<Utilisateur>(0);

 
    public Jeu() {
       
    }
   
    public Jeu(Console console, Type type, Studio studio) {
        this.console = console;
        this.type = type;
        this.studio = studio;
    }
   
    public Jeu(Console console, Type type, Studio studio, String nom, Integer annee, String descriptif, Boolean coeur, String img, Set<Utilisateur> utilisateurs, Set<Utilisateur> utilisateurs_1) {
       this.console = console;
       this.type = type;
       this.studio = studio;
       this.nom = nom;
       this.annee = annee;
       this.descriptif = descriptif;
       this.coeur = coeur;
       this.img = img;
       this.utilisateurs = utilisateurs;
       this.utilisateurs_1 = utilisateurs_1;
    }
   
    @Id
    @GeneratedValue(strategy=IDENTITY)   
    @Column(name="id", unique=true, nullable=false)
    public Integer getId() {
        return this.id;
    }
   
    public void setId(Integer id) {
        this.id = id;
    }

   
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="console", nullable=false)
    public Console getConsole() {
        return this.console;
    }
   
    public void setConsole(Console console) {
        this.console = console;
    }

   
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="type", nullable=false)
    public Type getType() {
        return this.type;
    }
   
    public void setType(Type type) {
        this.type = type;
    }
   

    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="studio", nullable=false)
    public Studio getStudio() {
        return this.studio;
    }
   
    public void setStudio(Studio studio) {
        this.studio = studio;
    }

   
    @Column(name="nom")
    public String getNom() {
        return this.nom;
    }
   
    public void setNom(String nom) {
        this.nom = nom;
    }

   
    @Column(name="annee")
    public Integer getAnnee() {
        return this.annee;
    }
   
    public void setAnnee(Integer annee) {
        this.annee = annee;
    }

   
    @Column(name="descriptif", length=65535)
    public String getDescriptif() {
        return this.descriptif;
    }
   
    public void setDescriptif(String descriptif) {
        this.descriptif = descriptif;
    }

   
    @Column(name="coeur")
    public Boolean getCoeur() {
        return this.coeur;
    }
   
    public void setCoeur(Boolean coeur) {
        this.coeur = coeur;
    }

   
    @Column(name="img")
    public String getImg() {
        return this.img;
    }
   
    public void setImg(String img) {
        this.img = img;
    }

   
    @ManyToMany(fetch=FetchType.EAGER)
    @JoinTable(name="jeua", catalog="exchangeit", joinColumns = {
        @JoinColumn(name="jeua", nullable=false, updatable=false) }, inverseJoinColumns = {
        @JoinColumn(name="utilisateura", nullable=false, updatable=false) })
    public Set<Utilisateur> getUtilisateurs() {
        return this.utilisateurs;
    }
   
    public void setUtilisateurs(Set<Utilisateur> utilisateurs) {
        this.utilisateurs = utilisateurs;
    }


    @ManyToMany(fetch=FetchType.EAGER)
    @JoinTable(name="jeuveut", catalog="exchangeit", joinColumns = {
        @JoinColumn(name="jeuveut", nullable=false, updatable=false) }, inverseJoinColumns = {
        @JoinColumn(name="utilisateurveut", nullable=false, updatable=false) })
    public Set<Utilisateur> getUtilisateurs_1() {
        return this.utilisateurs_1;
    }
   
    public void setUtilisateurs_1(Set<Utilisateur> utilisateurs_1) {
        this.utilisateurs_1 = utilisateurs_1;
    }
   
    @Override
    public String toString() {
       return this.id + ". " + this.nom;
    }
}


Quand j'ajoute par exemple un jeu à un utilisateur et que je tente de sauvegarder (via la methode saveOrUpdate), j'ai l'erreur suivante :

Quote:
Grave: "Servlet.service()" pour la servlet ExchangeItController a généré une exception
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '3-1' for key 'PRIMARY'


J'ai donc l'impression qu'au lieu de simplement ajouter dans la base la nouvelle entrée du HashSet "jeus" de l'utilisateur, hibernate tente de sauvegarder de nouveau toutes les entrées du HashSet, ce qui par conséquent cause des erreurs de clefs primaires.

Je suppose que je procède mal ! Comment faire ?

Merci d'avance pour votre aide !


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.