Bonjour,
J'ai un problème de rollback dans mon projet. Je tente de supprimer une ligne d'une table avec la méthode em.remove().
Quand la suppression est impossible à cause par exemple d'une contrainte de clé étrangère j'aimerais afficher un message à l'utilisateur pour lui signaler.
Le problème est que le rollback ne fonctionne pas. En effet j'ai une entity "Interne" qui hérite de "Intervenant". L'héritage est de type "joined". Quand une erreur survient pendant la suppression la ligne de la table interne est quand même supprimer.
Voila ma méthode qui supprime les intervenants :
Ma source de donnée dans le persistence.xml est déclaré ainsi :
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 public void supprimer(List<Intervenant> listeInter) throws SQLIntegrityConstraintViolationException{ EntityManager em = emf.createEntityManager(); EntityTransaction tx = null; try { tx = em.getTransaction(); tx.begin(); for (Intervenant intervenant : listeInter) { em.remove(em.merge(intervenant)); } tx.commit(); }catch(Exception e){ if(tx != null && tx.isActive()) tx.rollback(); e.printStackTrace(); if(e.getCause().getCause() instanceof SQLIntegrityConstraintViolationException) throw new SQLIntegrityConstraintViolationException(); tx.rollback(); } finally { em.close(); }
J'utilise glassfish et Mysql dans leurs dernières versions. Une idée d'ou peut venir le problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <persistence-unit name="IntranetJPA" transaction-type="RESOURCE_LOCAL"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <non-jta-data-source>jdbc/MySQL</non-jta-data-source> ... </persistence-unit>
Merci d'avance pour vos réponses.






Répondre avec citation
Partager