Salut à tous !
J'ai un étrange problème sur un de mes serveurs glassfish: visiblement mon EntityManager me fait un commit "dans le dos".
Pour commencer, voila mon code fonctionnant parfaitement de manière standard:
A la fin de ce morceau de code, le tuple '12345' est bien dans la base de donnée (normal puisque la transaction a été committée correctement).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 userTransaction.begin(); MonEntite entite = new MonEntite(12345); //... je set différentes valeurs entityManager.persist(entite); MonEntite persistedEntity = entityManager.createQuery("SELECT p FROM MonEntite p WHERE p.idpk=12345").getSingleResult(); //... userTransaction.commit(); //OK => il y a le tuple 12345 en DB
Maintenant le cas qui me pose problème:
Et la, si je regarde en base de données, le tuple '12345' a été committé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 userTransaction.begin(); MonEntite entite = new MonEntite(12345); //... je set différentes valeurs entityManager.persist(entite); MonEntite persistedEntity = entityManager.createQuery("SELECT p FROM MonEntite p WHERE p.idpk=12345").getSingleResult(); //... // [Problème business, on doit annuler la transaction] userTransaction.rollback(); //ERREUR => tuple 12345 existe dans la DB
J'ai poussé le test un peu plus loin:
Cela fonctionne parfaitement, la transaction est rollbackée correctement et le tuple n'est pas enregistré.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 userTransaction.begin(); MonEntite entite = new MonEntite(12345); //... je set différentes valeurs entityManager.persist(entite); userTransaction.rollback(); //OK => pas de tuple 12345 en DB
Le code suivant fonctionne également (pas de tuple enregistré):
J'ai constaté ce souci sur un de mes serveurs glassfish. J'ai repris le tout en local sur ma machine et le problème n'existe pas (dans tous les cas l'entité n'est pas persistée dès qu'il y a un rollback).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 userTransaction.begin(); MonEntite entite = new MonEntite(12345); //... je set différentes valeurs entityManager.persist(entite); MonEntite persisted = entityManager.find(MonEntite.class, 12345); userTransaction.rollback(); //OK => pas de tuple 12345 en DB
J'imagine donc que j'ai du me planter dans une configuration du serveur glassfish, mais je ne vois pas vraiment ou... A noter que j'utilise JTA et que mon EntityManager est en FlushModeType.AUTO.
Quelqu'un aurait-il une idée ?
Merci d'avance![]()
Partager