Salut,
J'ai un comportement étrange auquel il y a sûrement une bonne explication.
Voici un code dont les tests unitaires passent sans souci (sans hql) :
DAO :
Test Case :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public User selectById(Long id) { return (User)getSession().get(User.class, id); } public void delete(Long id) { getSession().delete(getSession().get(User.class, id)); } private Session getSession() { return sessionFactory.getCurrentSession(); }
Si je remplace le delete par ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public void testDeleteById() { User user = newUser(); user = userDao.insert(user); user = userDao.selectById(user.getId()); assertTrue(user != null); userDao.delete(user.getId()); user = userDao.selectById(user.getId()); assertNull(user); }
Le test ne passera plus, car le selectById me renverra l'objet supprimé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public void delete(Long id) { String hqlDelete = "delete User c where c.id = :id"; int affected = getSession().createQuery( hqlDelete ) .setLong( "id", id ) .executeUpdate(); System.out.println(affected); }
J'ai du mal à comprendre le pourquoi du comment.
A savoir : affected a bien la valeur 1 et si je test dans 2 transactions séparée, le delete est bien effectif. Le problème survient donc au sein d'une même transaction.
Merci d'avance
Partager