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 :

[Débutant] - ManyToMany - Doublons dans les tables


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 25
    Par défaut [Débutant] - ManyToMany - Doublons dans les tables
    Bonjour.

    J'ai une relation ManyToMany entre une classe "Collection" et une classe "Tableau".

    Un collection contient donc plusieurs Tableaux et un Tableau peut appartenir à plusieurs collections.

    J'ai donc une table de jointure auto-générée, mais le problème, c'est que j'ai autant de Tableaux dans ma table Tableaux que d'associations dans la table de jointure.

    Pour faire plus clair: Si j'ai 3 Collections qui contiennent chacune 2 Tableaux qui se retrouvent dans une des 2 autres collections, j'ai ceci:

    ColA Tableau1, Tableau2
    ColB Tableau2, Tableau3
    ColC Tableau1, Tableau4

    Dans mes tables j'ai après insertion:

    TAble "Collections" (ok)
    ----------------
    ColA
    ColB
    ColC

    Table de jointure "Collection_Tableau" (ok)
    ----------------------------------
    ColA Tableau1
    ColA Tableau2
    ColB Tableau2
    ColB Tableau3
    ColC Tableau1
    ColC Tableau4


    Table "Tableaus" (pas ok, j'ai des doublons)
    --------------
    Tableau1
    Tableau1
    Tableau2
    Tableau2
    Tableau3
    Tableau4

    --> Le problème est donc que dans ma table "Tableaux", je me retrouve avec des doublons, au lieu d'avoir une seule fois Tableau 1, une seule fois Tableau2 et ainsi de suite.

    Voici mon mapping
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class Collection...
     
        @ManyToMany(cascade = CascadeType.ALL)
        @JoinTable(name = "Collection_Tableau", joinColumns = @JoinColumn(name = "collection_ID"),
        inverseJoinColumns = @JoinColumn(name = "Tableau_ID"))
        private List<Tableau> listTableaux;
    Pour persister mes infos, en gros je fais:

    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
     
    tableau1 = new Tableau();
    tableau2 = new Tableau();
    tableau3 = new Tableau();
    tableau4 = new Tableau();
     
    maColA.add(tableau1);
    maColA.add(tableau2);
    persist(maColA);
     
    maColB.add(tableau2);
    maColB.add(tableau3);
    persist(maColB);
     
    maColA.add(tableau1);
    maColA.add(tableau4);
    persist(maColC);
    Je persiste donc mes Tableaux via le CascadeType.ALL de la Collection.

    Avoir des doublons dnas ma table "Tableaux" n'est bien sûr pas souhaité.
    Que puis-je faire pour ne plus avoir ces doublons ?

    Grand merci

  2. #2
    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
    Le problème c'est que une fois que tu définis tes objets tableaux sur un tableau_id, qui est j'imagine généré à la persistence.

    Là tes objets tableaux ont des id null, donc il considère que ce sont à chaque fois de nouveaux objets. Il faudrait recharger tes tableaux, plutôt que de les créer ex-nihilo.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 25
    Par défaut
    Ok,

    en fait j'ai bien défini un id pour mes tableaux comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name = "ID")
        private Long id;

    donc au lieu d'avoir un cascading sur le persist de ma Collection,
    je dois d'abord persister moi-même chacun des tableaux de la Collection, utiliser un dao pour les reloader dans le contexte depuis la db, les ajouter à ma collection et ensuite seulement persister la collection pour créer la jointure ?

Discussions similaires

  1. supprimer les doublons dans une table
    Par mavean dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 26/06/2019, 13h26
  2. Réponses: 10
    Dernier message: 23/11/2009, 22h49
  3. Débutant dans les tables
    Par dot-_-net dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 10/04/2008, 15h45
  4. problème pour éviter les doublons dans une table
    Par bonnet85 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 19/02/2008, 04h35
  5. Comment éviter les doublons dans ma table
    Par einegel dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/11/2004, 12h18

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