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 :

Erreur lors du delete en cascade


Sujet :

JPA Java

  1. #1
    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 Erreur lors du delete en cascade
    Bonjour, j'ai un soucis de delete qui ne veut pas s'effectuer, voici mon cas :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    class entityA {
     
    @OneToMany(mappedBy = "entityA", cascade = {CascadeType.ALL }, fetch = FetchType.LAZY)
        private Set<EntityB> listeB = new HashSet<EntityB>();	
     
    ....
     
    }
     
    class EntityB {
     
    @ManyToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH })
    @JoinColumn(name = "entityA_fk")
    private EntityA entityA;
     
     
    @ManyToOne(cascade = {CascadeType.ALL })
    @JoinColumn(name = "entityC_fk")
    @org.hibernate.annotations.Cascade (org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    private EntityC entityC;	
     
    @ManyToOne(cascade = {CascadeType.ALL })
    @JoinColumn(name = "entityD_fk")
    @org.hibernate.annotations.Cascade (org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    private EntityD entityD;
     
     
    ...
    }
     
    class entityC {
     
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "entityC")
    private Set<EntityB> listeB;
     
    ...
    }
     
    class entityD {
     
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "entityD")
    private Set<EntityB> listeB;
     
    ...
    }

    en insertion j'effectue l'opération suivante:
    lorsque mon entity A est persisté cela persiste toutes les relations.
    donc en traitement :
    ==== Début transaction ====
    EntityA a= new EntityA();
    ...
    EntityB b= new EntityB();
    ...
    EntityC c = new EntityC();
    ...
    EntityD d = new entityD();
    ...
    b.setEntityC(c);
    b.setEntityD(d);
    a.setEntityB(b);
    ...
    EntityADao.persist(a);

    ==== Fin transaction ====


    Et ma persistence se passe bien, tous les entity sont créé automatiquement en cascade. (Au départ j'avais une relation unidirectionnelle de entityB vers Entityc et EntityD, mais j'ai toujours la même erreur).

    Donc lors d'un delete j'ai le problème suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cannot delete or update a parent row: a foreign key constraint fails (`jsarapis/EntityB`, CONSTRAINT `FK18C474728849981A` FOREIGN KEY (`entityC_fk`) REFERENCES `EntityC` (`id`))
    et pour mon opération de suppression j'effectue ces étapes :

    ==== Début transaction ====
    Collection<EntityB> col = a.getListeB();
    je parcours ma liste jusqu'à ce que je trouve e, l'entityB à supprimer, boucle foreach
    EntityBDao.remove(e);
    ....
    EntityADao.merge(a)
    ==== Fin transaction ====

    cela me retourne l'erreur vu précédemment...

    J'ai pensé que le problème pouvait être que pour les liens entre e et les entity en relation C et D, ces C et D peuvent être liés à d'autre entityB. J'ai alors essayé de faire un remove des getListeB() des entityC et D concernés.

    en procédant ainsi :
    ==== Début transaction ====
    Collection<EntityB> col = a.getListeB();
    je parcours ma liste jusqu'à ce que je trouve e, l'entityB à supprimer, boucle foreach
    e.getEntityD().getListeB().remove(e);
    e.getEntityC().getListeB.remove(e);
    EntityBDao.remove(e);

    EntityADao.merge(a)
    ==== Fin transaction ====

    Mais là j'obtiens cette erreur :

    deleted entity passed to persist: [org.project.EntityD#<null>]; nested exception is javax.persistence.EntityNotFoundException: deleted entity passed to persist: [org.project.EntityD#<null>]
    Exception in thread "main" org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly

    Quelqu'un aurait une idée par rapport à cela ? Je butte sur ce problème depuis un peu trop de temps...

  2. #2
    Rédacteur
    Avatar de longbeach
    Profil pro
    Architecte de système d’information
    Inscrit en
    Avril 2003
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Avril 2003
    Messages : 943
    Points : 2 370
    Points
    2 370
    Par défaut
    impossible de t'aider si tu ne mets pas plus d'extraits de code.
    A quel moment tu fais un persist ? sur quelle entité ? quel est l'état de cette entité ? etc

  3. #3
    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
    j'ai édité le post, toutes mes opérations sont englobées dans une transaction (managé par spring), et je ne détache pas mes entity durant mes opérations de modifications suppressions...

Discussions similaires

  1. [10g] Erreur lors d'éxécution de plusieurs DELETE
    Par valboubou dans le forum PL/SQL
    Réponses: 12
    Dernier message: 18/03/2014, 18h12
  2. Erreur lors du delete des chekbox item
    Par virus321 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 02/12/2013, 15h26
  3. Erreur lors d'un Update et delete [Entities Framework : FW 4.0]
    Par napster dans le forum Entity Framework
    Réponses: 4
    Dernier message: 04/04/2011, 11h04
  4. delete on cascade erreur
    Par yuchii dans le forum Administration
    Réponses: 2
    Dernier message: 06/07/2008, 18h38
  5. Erreur lors de la conversion d'une requête SELECT en DELETE
    Par SamLeChiseuji dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 11/07/2007, 15h09

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