Envoyé par
longbeach
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 :
Contact newContact = em.find(Contact.class, contactVO.getID());
Alors que je devais faire :
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é) :
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 :
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.
Partager