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 :

Many to Many bidirectionnelle avec Hibernate Annotation


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    690
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 690
    Par défaut Many to Many bidirectionnelle avec Hibernate Annotation
    Bonjour,
    Je sais que c'est juste un instruction que je dois ajouter quelque part, mais je ne sais pas laquelle
    Je veux faire un Many to Many bidirectionnel entre deux classes. Avec le code suivant j'obtiens deux tables de jointures, comme si les associations étaient indépendantes entre elles :
    Pour la classe Produit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    @ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE},
    			targetEntity=com.dimedia.entities.Auteur.class)
    ...
    Pour la classe Auteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    @ManyToMany (cascade={CascadeType.PERSIST, CascadeType.MERGE},
    			targetEntity=com.dimedia.entities.Produit.class)
    ...
    Que dois je ajouter pour n'utiliser qu'une seule table de jointure ???
    Merci de votre aide !

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par ygrim Voir le message
    Que dois je ajouter pour n'utiliser qu'une seule table de jointure ???
    Merci de votre aide !
    @JoinTable(name=…

  3. #3
    Membre émérite

    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    690
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 690
    Par défaut
    J'ai essayé ça mais la jointure n'est pas bidirectionnelle pour autant !
    Il faut toujours que j'utilise le setter de la classe produit pour que la jointure se fasse en base de données ...

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Tu trouveras un exemple avec ce lien, un peu plus bas dans la doc:
    http://www.hibernate.org/hib_docs/an...on-collections

    D'un coté, il faut un "@JoinTable" comme cela a été dit, et de l'autre il faut un "mappedBy".

  5. #5
    Membre émérite

    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    690
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 690
    Par défaut
    Salut,
    J'ai fait ça mais sa donne le même effet : unilatéral.
    Je pense que le mieux est que je poste mes bouts de code :
    La classe produit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE},
    			targetEntity=com.dimedia.entities.Auteur.class)
     
    	@JoinTable (name="Auteur_Produit",
    			joinColumns={@JoinColumn(name="Produit")}, inverseJoinColumns={@JoinColumn(name="Auteur")}
    	)
    	public List<Auteur> getAuteurs() {
    		return auteurs;
    	}
    La classe auteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @ManyToMany (cascade={CascadeType.PERSIST, CascadeType.MERGE},
    			targetEntity=com.dimedia.entities.Produit.class,mappedBy="auteurs")
     
    	public List<Produit> getProduits() {
    		return produits;
    	}
    Et ma méthode JUnit qui teste tout ça :
    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
    public void testManyToManyProduitAuteur() {
    		Auteur aut = new Auteur ();
    		aut.setNomAuteur("many to many");
     
    		Produit prod = new Produit();
    		prod.setCodeEAN("manytomany");
     
    		List<Produit> prods = new ArrayList<Produit>();
    		prods.add(prod);
     
    		List<Auteur> auts = new ArrayList<Auteur>();
    		auts.add(aut);
     
    		auteurDAO.saveAuteurs(auts);
    		produitDAO.saveProduits(prods);
     
    		prod.setAuteurs(auts);
    		produitDAO.saveProduit(prod);
     
    		Produit prod2 = new Produit();
    		prod2.setCodeEAN("manytoomany");
    		prods.add(prod2);
    		produitDAO.saveProduit(prod2);
     
    		aut.setProduits(prods);
    		auteurDAO.saveAuteur(aut);
     
    		Query q = auteurDAO.getSession().createSQLQuery("select * from auteur_produit");
    		List result = q.list();
    		// On a mappé deux produits avec un auteur, donc au min 2 entrées dans la table !
    		assertTrue(result.size() >= 2);
    	}
    Je me traine cette erreur depuis une semaine en TODO...

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par ygrim Voir le message
    Salut,
    J'ai fait ça mais sa donne le même effet : unilatéral.

    Je me traine cette erreur depuis une semaine en TODO...
    et ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @JoinTable (name="Auteur_Produit",
    			joinColumns={@JoinColumn(name="Auteur")}, inverseJoinColumns={@JoinColumn(name="Produit")}
    	)
    du côté Auteur… ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/10/2014, 16h30
  2. [2.x] [Symfony2] Many-to-Many bidirectionnelle avec attributs
    Par Legenyes dans le forum Symfony
    Réponses: 0
    Dernier message: 03/06/2013, 14h33
  3. [Data] erreur many to one avec hibernate et spring
    Par hanen14 dans le forum Spring
    Réponses: 2
    Dernier message: 13/04/2010, 13h37
  4. Problème de séquence avec Hibernate annotation
    Par GabriHell dans le forum Hibernate
    Réponses: 1
    Dernier message: 29/07/2008, 17h52
  5. Un peu de mal a comprendre le concepte "one-to-many" et "many-to-many"
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/03/2007, 18h50

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