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 :
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();
}
Test Case :
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);
}
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
 
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);
}
Le test ne passera plus, car le selectById me renverra l'objet supprimé.
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