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 :

Problème de suppression d'une entité JPA


Sujet :

JPA Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Problème de suppression d'une entité JPA
    Bonjour,

    La suppression de mon entité persistante ne marche pas. Le code est :

    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
     
    EntityManager em = EntityManagerUtil.getEntityManagerUtil().getEntityManager();
    EntityTransaction tr = em.getTransaction();
    tr.begin();			
     
    Contact newContact = em.find(Contact.class, contactVO.getID());
     
    if (newContact == null)		    
          throw new IllegalArgumentException("Suppression impossible. Ce contact n'existe pas.");		  
    else 
    {
         em.remove(newContact);
    }
    tr.commit();
    EntityManagerUtil.closeEntityManager();
    "EntityManagerUtil" est une classe utilitaire qui me permet d'instancier EntityManagerFactory et EntityManager. Elle fonctionne bien (je l'utilise de la même façon dans mes ajouts, recherches et modifications sans problème).

    ContactVO est une Value Object (image de l'entité Contact). Et son ID est bien renseigné !

    Le problème est qu'avec ce code (qui est sensé effectuer une suppression), rien n'est supprimé de la BD. Au contraire, lors d'un check dans la BD, je me rend compte que la ligne correspondante a été mise à jour (champs NOM, PRENOM à vides).

    une idée ?

    Merci.

  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
    Faut que tu flush l'EntityManager :

    em.flush();

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Re:
    Citation Envoyé par longbeach Voir le message
    Faut que tu flush l'EntityManager :

    em.flush();
    Salut,

    Désolé de n'avoir pas indiqué quelle était mon erreur.
    Au fait ce n'est pas à cause de l'absence du flush() mais plutôt une mauvaise transmission de la clé de l'entité Contact à la méthode find() :

    J'avais écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Contact newContact = em.find(Contact.class, contactVO.getID());
    Alors que je devais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Contact newContact = em.find(Contact.class, new Long(contactVO.getID()));
    car la clé primaire est de type classe Long et contactVO.getID() ne retourne d'un entier.

    Maintenant, on me dira mais si c'était ça alors une exception serait levée (car l'objet ne serait pas trouvé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       if (newContact == null)		    
          throw new IllegalArgumentException("Suppression impossible. Ce contact n'existe pas.");
    Et je répondrais que je n'en ai aucune idée. Mais en tout cas, dès que j'ai apporté cette modification, la suppression marche (sans effectuer de flush !).

    Finalement, le code fonctionnel est :

    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
     
       EntityManager em = EntityManagerUtil.getEntityManagerUtil().getEntityManager();
       EntityTransaction tr = em.getTransaction();
    tr.begin();			
     
    Contact newContact = em.find(Contact.class, new Long(contactVO.getID()));
     
    if (newContact == null)		    
          throw new IllegalArgumentException("Suppression impossible. Ce contact n'existe pas.");		  
    else 
    {
         em.remove(newContact);
    }
    tr.commit();
    EntityManagerUtil.closeEntityManager();
    Cordialement.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Points : 108
    Points
    108
    Par défaut
    Merci pour ton retour, cette astuce mérite d'être notée. Pour info, quelle implémentation de JPA utilises tu ?

Discussions similaires

  1. [EJB3.1] Problème de suppression d'une entité avec une clé composite
    Par bruneltouopi dans le forum Java EE
    Réponses: 2
    Dernier message: 02/08/2012, 11h50
  2. Problème de suppression d'une entité enfant
    Par amine.oualialami dans le forum JPA
    Réponses: 7
    Dernier message: 21/05/2010, 15h05
  3. [Jtable] problème de suppression dans une Jtable
    Par gianni17 dans le forum Composants
    Réponses: 1
    Dernier message: 02/12/2005, 18h36
  4. Problème de suppression dans une table
    Par Splinter dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/10/2005, 10h55
  5. [JTable] problème après suppression d'une ligne
    Par fredo3500 dans le forum Composants
    Réponses: 7
    Dernier message: 17/03/2005, 10h01

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