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 :

@IdClass donne une org.hibernate.MappingException: Repeated column in mapping [Mapping]


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 307
    Par défaut @IdClass donne une org.hibernate.MappingException: Repeated column in mapping
    Bonjour,

    Encore et toujours un problème avec Hibernate (oui grand débutant inside ^^)

    J'ai défini une classe Member qui possède une clé composé de 2 autres classes : Team et User.
    J'ai créé une 4e classe MemberId, et je l'ai liée à la classe Member avec @IdClass.

    Mais voilà, quand je veux insérer une nouvelle équipe avec une liste de membres, j'ai une exception NonUniqueObjectException org.hibernate.MappingException:
    a different object with the same identifier value was already associated with the session: [mon.package.core.bo.project.Member#mon.package.core.bo.project.MemberId@3c1]
    Repeated column in mapping for entity: mon.package.core.bo.project.Member column: team_id (should be mapped with insert="false" update="false")]

    J'ai suivi ces tutoriaux :


    ... mais apparemment j'ai raté quelque chose... Une idée ???

    Voici ma classe MemberId:
    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
    public class MemberId implements Serializable {
     
    	private static final long serialVersionUID = 6040870329125500445L;
     
    	private int userId;
    	private int teamId;
     
    	public MemberId(){};
     
    	public MemberId(int userId, int teamId) {
    		super();
    		this.userId = userId;
    		this.teamId = teamId;
    	}
     
             //getters et setters
    Et ma classe Member :
    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
    @Entity
    @Table(name="member")
    @IdClass(MemberId.class)
    public class Member implements Serializable  {
     
    	private static final long serialVersionUID = -6866932754421199976L;
     
    	@Id
    	@Column(name="team_id", insertable=false, updatable=false)
    	private int teamId;
     
    	@Id
    	@Column(name="user_id", insertable=false, updatable=false)
    	private int userId;
     
    	@ManyToOne(fetch=FetchType.LAZY)
    	@JoinColumn(name="team_id")
    	private Team team = null;
     
    	@ManyToOne
    	@JoinColumn(name="user_id")
    	private User user = null;
     
            //...

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 307
    Par défaut
    Quelqu'un aurait-il une idée, une piste, ou un petit quelque chose vers lequel je pourrais m'orienter ?
    Parce que là je désespère

  3. #3
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Ca me semble curieux comme modèle : pourquoi ne pas avoir juste les deux objets ? Quitte à créer un getter spécifique pour retourner les identifiants.

    Cela dit, quitte à préciser qu'il n'y a pas d'update / insertion, je le ferai préférentiellement sur les jointures plutôt que sur l'identifiant. Ou au pire sur les deux ...

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 307
    Par défaut
    Un utilisateur peut être membre de plusieurs équipes, et une équipe peut compter plusieurs utilisateurs comme membre. De plus, un utilisateur peut être un membre restreint pour une équipe, j'ai donc ajouté un champs "is_restricted" à ma table de jointure. C'est pour ça que j'ai créé une 3e entités "Membre"...

    Concernant mon problème, je l'ai résolu en créant un identifiant unique et auto-incrémenté dans la table membre...

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/11/2009, 01h29
  2. Réponses: 1
    Dernier message: 24/02/2009, 19h18
  3. Réponses: 8
    Dernier message: 17/04/2008, 17h29
  4. premier exemple hibernate: org.hibernate.MappingException
    Par info_plus dans le forum Hibernate
    Réponses: 3
    Dernier message: 26/03/2008, 12h31
  5. Réponses: 3
    Dernier message: 09/10/2006, 14h11

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