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 :

Cannot delete a parent row


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Par défaut Cannot delete a parent row
    J'ai simplifié en prenant un exemple plus parlant.
    J'utilise JPA avec Hibernate et Mysql.

    Pour le contexte, on imagine que l'application concerne une gestion de personnes vivant en Belgique et que chaque personne appartient à un groupe au maximum ou à aucun.

    Voici le détail de mes classes.

    J'ai crée une classe Personne qui possède une relation OnetoOne facultatif avec un groupe belge.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     @OneToOne(cascade = CascadeType.ALL, fetch=FetchType.LAZY,optional=true )
     	 @JoinColumn(name = "groupe", unique = true)
     	 private Groupe groupe;
    Dans ma classe Groupe, j'ai une relation vers les personnes qui appartienent au groupe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @OneToMany(mappedBy = "groupe", cascade = CascadeType.ALL)
    	 private Set<Personne> personnes= new HashSet<Personne>();

    La conséquence au niveau de la base de données est qu'il y a une contrainte nommée groupe dans la table personne qui peut être vide ou pas

    Il y a aussi une table Groupe qui possède en clé primaire le numéro de groupe (id) ainsi que d'autres champs nécessaire à la description du groupe(obligatoire).


    J'ai crée mes objets et je les ai persisté en base et ça marche.
    J'ai tenté d'éditer un attribut d'un objet Groupe et de le persister, ça marche.

    Par contre, j'ai tenté de supprimer un Groupe et il génère l'erreur suivante qui me semble logique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ATTENTION: SQL Error: 1451, SQLState: 23000
    30 juin 2009 19:32:43 org.hibernate.util.JDBCExceptionReporter logExceptions
    GRAVE: Cannot delete or update a parent row: a foreign key constraint fails (`pkr`.`personne`, CONSTRAINT `FK3305B93C789737` FOREIGN KEY (`groupe`) REFERENCES `groupe ` (`id`))

    Ma question est donc comment je peux modifier mon modèle pour permettre la suppression d'un groupe sans autant supprimer les personnes appartenant à ce groupe. En effet, une personne peut appartenir à 0 ou 1 groupe.



    Merci beaucoup

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 9
    Par défaut
    Tu peux essayer de remplacer

    cascade = CascadeType.ALL

    par

    cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})

    la non presence de CascadeType.REMOVE devrait eviter la suppression en cascade.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/07/2012, 17h52
  2. Réponses: 25
    Dernier message: 29/07/2010, 19h30
  3. GRIDVIEW: confirmation pour le delete d'une row
    Par cortex024 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 06/07/2007, 16h50

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