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 :

[JPA] Problème lors d'un remove


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2014
    Messages : 19
    Par défaut [JPA] Problème lors d'un remove
    Bonjour,
    je viens vous demander conseil car je me sens bloqué.

    coté BDD, j'ai 3 tables:

    user: idUser, login, email
    parking: idPark, name, country,city, etc
    UserPark: idUser, idPark

    coté objet java, j'ai créé les 2 entity suivante:

    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
    public class ParkingBean {
        @Id
        @Column(name = "idPark")
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int idPark;
     
        @Column(name = "country")
        private String country;
     
        @Column(name = "city")
        private String city;
     
        @ManyToMany(mappedBy = "listPark", fetch = FetchType.LAZY)
        private List<User> listUser = new ArrayList<User>();
    }
    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
    @Entity
    @Table(name = "REF_USER")
    public class User {
     
        @Id
        @Column(name = "idUser")
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int idUser;
     
        @Column(name = "email")
        private String email;
     
        @Column(name = "username")
        private String username;
     
        @ManyToMany(fetch = FetchType.LAZY)
        @JoinTable(name = "REF_USERPARK", joinColumns = { @JoinColumn(name = "idUser") }, inverseJoinColumns = { @JoinColumn(name = "idPark") })
        private List<ParkingBean> listPark = new ArrayList<ParkingBean>();

    la relation entre les objet user et parking est une relation N,N.

    le but est d'ajouter, supprimer, modifier chaque objet, et leur relation.

    Je rencontre un problème pour la suppression que je ne comprend pas.
    Je m'explique, si un user a une liste de parking, lorsque je le supprime, très bien tout fonctionne correctement, l'utilisateur est supprimé, ainsi que les dépendances.

    Par contre a l'inverse, si un parking a une liste d'utilisateur, lorsque je le supprime, j'ai l'erreur MySQLIntegrityConstraintViolationException. erreur que je comprend liée a la relation.

    J'ai donc rajouter ceci dans l'entity parking

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        @ManyToMany(mappedBy = "listPark", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
        private List<User> listUser = new ArrayList<User>();
    maintenant je n'ai plus d'erreur, mais Hibernate va plus loin dans la suppression puisqu'il supprime le parking, les dépendances entre mon parking et les utilisateurs MAIS aussi les utilisateurs qui lui sont associés....

    Le but est juste de supprimer le parking et les dépendances associés sans supprimer les utilisateurs. Pouvez vous m'expliquer car je bloque un peu lol.
    En vous remerciant d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Bonjour,
    Pour bien comprendre fonctionnellement,en un instant t quelconque un Utilisateur peut être dans plus d'un parking? ce n'est physiquement pas possible, à moins que j'ai pas tous compris.
    Ne serait ce pas plutot: Un utilisateur en un instant T quelconque se trouve dans un seul et un seul parking (ou pas d'ailleurs ) et inversement en un instant T un parking peut abriter plusieurs User?
    Une fois qu'on s'est accordés sur l'aspect fonctionnel on reviendra ensuite sur ton mapping qui n'est pas bon quelque soit la réponse que tu donneras à la question ci dessus.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2014
    Messages : 19
    Par défaut
    Super, je vais essayer de mieux m'exprimer

    Un utilisateur peut gérer plusieurs parking et inversement, un parking peut être géré par plusieurs utilisateurs. J'ai une relation N N entre les entités parking et user.

    Je créé une application qui permet d'administrer les deux entités. lorsque je sélectionne un utilisateur, je peux voir les parkings qu'il gère et inversement lorsque je sélectionne un parking, je peux voir les utilisateurs qui le gèrent.

    voici les tables de la bdd.

    Parking (idPark)
    User (idUser)
    UserPark(idUser,idPark)

    Ayant une relation N,N entre les tables parking et user, j'ai créer une table intermédiaire UserPark.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Voila qui est mieux exprimé. Ce que j'aurais fait à ta place, c'est de casser le ManyToMany souvent trop compliqué à gérer pour rien. Et faire un OneToMany entre User ==> UserPark et egalement un OneToMany entre Parking==>UserPark.
    Ainsi ton entité UserPark serait une entité à part entière gérée avec pour clé primaire une clé doublon (idUser,idPark), et on peut d'ailleurs supposer qu'à terme il y'ait des attributs propres à cette classe d'association comme la date de prise d'un parkin par un user, ou la date de cession de ce parking par le même user. Et ainsi dans ton entité User il y'aurait un One>ToMany vers UserPark avec un cascade Remove. Ainsi donc une suppression d'un User ne supprimerait que les dépendances vers les parking et non les parking en eux même, de même que la suppression d'un Parking ne supprimerait que les dependances avec les user sans en supprimer. Je me fais comprendre ?

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/09/2008, 13h42
  2. Problème lors d'un Update sur une date
    Par Nany dans le forum ASP
    Réponses: 3
    Dernier message: 19/05/2004, 22h37
  3. Problème lors du EXTEND d'un tableau
    Par banana31 dans le forum Oracle
    Réponses: 14
    Dernier message: 10/02/2004, 10h58
  4. Problème lors du chargement
    Par carlito dans le forum Flash
    Réponses: 26
    Dernier message: 06/01/2004, 15h21
  5. Réponses: 2
    Dernier message: 17/08/2003, 20h07

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