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

Développement Web en Java Discussion :

[J2EE / Hibernate] Problèmes d'annotation


Sujet :

Développement Web en Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut [J2EE / Hibernate] Problèmes d'annotation
    Bonjour,

    Je travaille actuellement sur un projet J2EE(hibernate et spring)/Flex. Je rencontre un problème que je n'arrive pas à résoudre.

    Dans ma base j'ai:
    - une table AFFAIRE reliée à plusieurs IDENTITE et à plusieurs ADRESSE
    - une table IDENTITE reliée à une AFFAIRE et plusieurs ADRESSE
    - une table ADRESSE reliés à une AFFAIRE.

    Voici le code JAVA.
    AFFAIRE:
    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
     
    @Entity
    @Table(name = "affaire")
    public class Affaire implements java.io.Serializable {
            private Integer idAffaire;
            private Set<Identite> identites = new HashSet<Identite>(0);
            private Set<Adresse> adresses = new HashSet<Adresse>(0);
            //autres attributs
     
    	@Id
    	@GeneratedValue(strategy = IDENTITY)
    	@Column(name = "ID_AFFAIRE", unique = true, nullable = false)
    	public Integer getIdAffaire() {
    		return this.idAffaire;
    	}
     
    	@OneToMany(fetch = FetchType.EAGER, mappedBy = "affaire" ,
    			cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    	@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
    	public Set<Identite> getIdentites() {
    		return this.identites;
    	}
     
    	@OneToMany(fetch = FetchType.EAGER,
    			cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    	@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
    	public Set<Adresse> getAdresses() {
    		return this.adresses;
    	}
            //....
    }
    IDENTIE
    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
     
    @Entity
    @Table(name = "identite")
    public class Identite implements java.io.Serializable {
            private Integer idIdentite;
            private Affaire affaire;
            private Set<Adresse> adresses = new HashSet<Adresse>(0);
            //autres attributs
     
    	@ManyToOne(fetch = FetchType.EAGER)
    	@JoinColumn(name = "AFFAIRE_ID_AFFAIRE")
    	public Affaire getAffaire() {
    		return this.affaire;
    	}
     
    	@OneToMany(fetch = FetchType.EAGER, mappedBy = "identite",
    			 cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    	@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
    	public Set<Adresse> getAdresses() {
    		return this.adresses;
    	}
           //....
    }
    ADRESSE
    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
     
    @Entity
    @Table(name = "adresse")
    public class Adresse implements java.io.Serializable {
            private Integer idAdresse;
    	private Affaire affaire;
            //autres attributs
     
    	@ManyToOne(fetch = FetchType.EAGER)
    	@JoinColumn(name = "AFFAIRE_ID_AFFAIRE", nullable = true)
    	public Affaire getAffaire() {
    		return this.affaire;
    	}
          //....
    }
    Je souhaite que lorsque j'ajoute/update une AFFAIRE contenant plusieurs IDENTITES qui contiennent eux même plusieurs ADRESSE, il y ait dans chaque IDENTIE et chaque ADRESSE une reference à l'AFFAIRE sauvegardé.

    A l'heure actuelle tout se sauvegarde bien mais l'objet AFFAIRE dans IDENTITE et ADRESSE reste null.

    pouvez vous m'aider.

    Merci d'avance.
    ps: Pour information je reprend le projet et je ne peux pas trop changer la base.

  2. #2
    Membre régulier
    Femme Profil pro
    Analyste-developpeur java
    Inscrit en
    Mai 2010
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste-developpeur java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2010
    Messages : 135
    Points : 76
    Points
    76
    Par défaut
    Bonjour!

    Je suis plutôt débutante donc il est possible que je te dise une bêtise mais c'est toujours une option.

    Lors de la création en base de ton objet Affaire, la relation one to Many dans le sens de l'identité est asservie par ton objet Affaire (option mapped by). Cette asservissement maintient leurs valeurs en cohérence. Ta relation bidirectionnelle affaire - identité ne possède aucun sens d'asservissement, de ce fait les éléments qui forment ta relation sont considérés comme indépendant du point de vu d'Hibernate.

    Je remarque en revanche que ta relation Identité-Adresse est bien asservie dans le sens de l'identité mais la création d'identité en base issu d'une cascade ne permet visiblement pas une deuxième cascade vers ton adresse.

    En conclusion, je pense que tu devrais asservir ta relation one to many depuis affaire vers adresse: Ajouter un mappedBy = "affaire" dans ton objet AFFAIRE.

    J'espère que cela résoudra ton problème!

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci de ta réponse, mais j'ai résolut mon problème.

    L'erreur venais des annotations qui étaient mauvaises et unidirectionnel en plus.

    voici un exemple pour aider.
    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
     
    @Entity
    @Table(name = "affaire")
    public class Affaire implements java.io.Serializable {
            private Integer idAffaire;
            private Set<Identite> identites = new HashSet<Identite>(0);
     
            //some code
     
    	@OneToMany(fetch = FetchType.EAGER,cascade=CascadeType.ALL)
    	@JoinColumn(name="FK_AFFAIRE")
    	@Cascade(org.hibernate.annotations.CascadeType.DELETE)
    	public Set<Identite> getIdentites() {
    		return this.identites;
    	}
    }
     
     
    @Entity
    @Table(name = "identite")
    public class Identite implements java.io.Serializable {
            private Integer idIdentite;
            private Affaire affaire;
     
            //some code
     
    	@ManyToOne(fetch = FetchType.EAGER)
    	@JoinColumn(name = "FK_AFFAIRE", insertable=false, updatable=false)
    	public Affaire getAffaire() {
    		return this.affaire;
    	}
     
    }
    Merci encore.

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

Discussions similaires

  1. Problème d'annotation hibernate
    Par yaya0057 dans le forum Hibernate
    Réponses: 2
    Dernier message: 03/03/2009, 10h03
  2. [STRUTS/HIBERNATE] Problème d'exécution de requête
    Par mc_chicken dans le forum Hibernate
    Réponses: 5
    Dernier message: 21/10/2005, 09h27
  3. [Hibernate] problème d'insertion dans la base de données
    Par Willy7901 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 18/08/2005, 13h19
  4. [hibernate]Problème de récupération d'objet...
    Par roxx62 dans le forum Hibernate
    Réponses: 1
    Dernier message: 07/07/2005, 11h36
  5. [plugin hibernate] problème d'installation
    Par slymira dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 09/06/2005, 13h06

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