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 :

Persistance transitive et doublons


Sujet :

JPA Java

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 162
    Par défaut Persistance transitive et doublons
    Bonjour,

    J'ai 1 objet "user" attaché à 100 "passions".

    J'ai crée mes passions unes par unes avec des new Passions("blabla"), j'ai ensuite crée mon objet "user" et lui ai lié ses passions avec ma méthode helper user.addPassion(Passion passion) de la classe User donc.

    Maintenant je rends persistant mon objet "user". Il est alors sauvegardé en base et toutes ces passions sont ajoutées automatiquement à la table "passion" car mon CascadeType est à ALL.

    Seulement dans ces passions, il y en avait des redondantes avec un autre user. J'aimerais que soient uniquement crées les nouvelles passions. Alors je fais comment ?

    (Je n'ai pas envie de tester l'existence de toutes les passions car 100 requêtes en bases ça me paraît un peu lourd...)

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    De ce que je comprends, il te faudrait ces tables :
    - User
    - Passion
    - UserPassion

    Hors toi, il semblerait que tu n'es que User et Passion.
    Donc, peux-tu montrer la structure de tes tables ?

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 162
    Par défaut
    Non j'ai bien les 2 tables user et passion avec une table de jointure user_passion en prime.

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Peux-tu montrer le mapping ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 162
    Par défaut
    user*----------*passion

    Classe User :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @ManyToMany(mappedBy="userSet", cascade = {CascadeType.ALL})
    private Set<Passion> passionSet = new HashSet<Passion>();
    Classe Passion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @ManyToMany
    private Set<User> userSet = new HashSet<User>();

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Par défaut
    Tel que tu énonces ton problème il y a une anomalie
    Tu dis que les Passions sont créées à l'aide d'un " new Passion() " puis sont affectées à l'utilisateur.
    Dans ce cas il est strictement impossible que cette Passion existe déjà en base en étant déjà associé à un autre utilisateur.

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 162
    Par défaut
    Je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Passion p1 = new Passion("Football");
    Passion p2 = new Passion("Tennis");
    User u1 = new User("Toto");
    u1.addPassion(p1);
    em.persist(u1);
    Si il y a déjà un autre user qui avait la passion "Football", je ne voudrais pas qu'il recrée en base un autre enregistrement "Football" avec un autre id mais qu'il assigne celui qui existe déjà à mon user !

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Oui mais on ne procède pas comme ça...
    Il faudrait que tu recherches l'existence de Passion avant de faire un new Passion().
    Pourquoi ne pas lui proposer une liste de choix (pas forcément obligatoire mais possible, genre suggestion)

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 162
    Par défaut
    Ok donc ce que je comprends c'est que je n'ai pas le choix de tester l'existence en base...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/03/2010, 17h10
  2. Réponses: 1
    Dernier message: 02/01/2008, 14h28
  3. Effet de transition simple entre 2 images
    Par ChrisFAPS dans le forum Flash
    Réponses: 2
    Dernier message: 18/04/2003, 13h41
  4. tri a bulle sans les doublons
    Par comme de bien entendu dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 10/03/2003, 17h29
  5. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 13h21

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