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

JPA Java Discussion :

many to many qui ne fonctionne pas dans un sens


Sujet :

JPA Java

  1. #1
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Points : 4 265
    Points
    4 265
    Par défaut many to many qui ne fonctionne pas dans un sens
    Bonjour,

    J'ai une relation many to many entre deux objets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @Entity
    public class Profil
    {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        protected int id;
     
        @ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE})
        @JoinTable(name="profil_droit", 
                   joinColumns = @JoinColumn(name = "profil_id"), 
                   inverseJoinColumns = @JoinColumn(name = "droit_id"))
        protected List<Droit> droits;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Entity
    public class Droit
    {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        protected int id;
     
        @ManyToMany(mappedBy = "droits")
        protected List<Profil> profils;
    }
    Dans Profil, c'est OK :
    L'ajout de droits à une instance profil et la sauvegarde de cette instance fonctionne bien.
    La suppression d'une instance profil efface bien les données de la table de relation (profil_droit) si on ôte le CascadeType.DELETE qui lui essaye également de supprimer les objets Droit qui peuvent exister par ailleurs (violation de contrainte).

    Dans Droit, les cascades ne fonctionne pas.
    Il ne met pas à jour et n'efface pas en cascade. Il râle lors d'une suppression car il y a des violations de contrainte.
    Si je met @ManyToMany(mappedBy = "droits", cascade={CascadeType.DELETE}), il efface carrément les profils qui contenaient ce droit au lieu de simplement l'enlever de la table de relation.


    Avant d'essayer de passer par une jointure many to many explicite (qui m'oblige à créer un objet pour la table intermédiaire), est-ce que quelqu'un a utiliser avec succès des relations many to many et dans les deux sens (suppression, maj) !

    Dans ce cas, avez vous une idée du problème ?
    J'ai regardé beaucoup de forums et ce problème (ou similaire) semble récurrent mais il n'y a jamais de solution. Est-ce à dire que personne ne fait de many/many implicite utilisée des 2 côtés ???

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Je ne suis pas sûr qu'il soit possible de gérer les relations dans les deux sens, car il est bien spécifié qu'il n'y a qu'une classe qui est "gestionnaire" de la relation.
    D'où la notion de cascade que dans une seule définition sur les deux définitions que tu as fait pour un cas bidirectionnel.

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2010
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 121
    Points : 74
    Points
    74
    Par défaut
    Bonjour, je ne sais pas si tu cherche encore des réponses a cette question mais juste je suis entrain de lire le bouquin ProEJB et la grande différence entre une relation ManyToMany et OneToMany pour reprendre le passage du bouquin histoire de ne pas faire de fautes :

    "The second difference is that there are no join columns on either side of the relationship.We will see in the next section that the only way to implement a many to many relationship is with a separate join table."

  4. #4
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Points : 4 265
    Points
    4 265
    Par défaut
    Depuis 2 ans, je suis passé à autre chose mais merci quand même de la réponse qui semble confirmer ce que je pensais.

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/12/2009, 08h27
  2. many to one qui ne fonctionne pas
    Par Invité dans le forum Hibernate
    Réponses: 0
    Dernier message: 22/07/2009, 18h12
  3. function javascript qui ne fonctionne pas dans la balise <body>
    Par typikal dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/04/2008, 16h45
  4. Réponses: 6
    Dernier message: 22/05/2007, 09h55
  5. [FTP] fopen qui ne fonctionne pas dans tous les contextes ..
    Par Christophe Charron dans le forum Langage
    Réponses: 6
    Dernier message: 15/06/2006, 10h25

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