Bonjour,

Je suis entrain de réaliser des tests sur une méthode de mise à jour. Mais quand je l'exécute j'ai une DataAccessException :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
a different object with the same identifier value was already associated with the session: [domain.model.Clients#173]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [domain.model.Clients#173]
Voilà le code de ma méthode de test (j'utilise JUnit pour les tests et Spring pour l'injection des dépendances)
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
21
22
23
@Test
	public void testUpdateClient() {
		/** met à jour un client qui existe */
		// ajout d'un nouveau client en vérifiant qu'il n'existe pas avant
		Clients clientAUpdater = new Clients("referenceTest2", "nomTest2",
				"adresseTest2", "adresseFacturationTest2",
				"adresseLivraisonTest2", "conditionsPaiementTest2",
				"telephoneTest2", "mailTest2", "numereoTest2");
		boolean existePas = this.clientsManager.clientExiste(clientAUpdater
				.getNom());
		assertFalse(existePas);
		this.clientsManager.sauvegarderClient(clientAUpdater);
		// mise à jour du client
		clientAUpdater.setAdresse("");
		clientAUpdater.setAdresseFacturation("");
		clientAUpdater.setMail("");
		this.clientsManager.updateClient(clientAUpdater);
		// récupère les données du client mis à jour et on teste que les valeurs
		// du client mis à jour sont les mêmes que celle qui ont été passées.
		Clients clientUpdate = this.clientsManager.getClient("nomTest2");
		assertEquals("", clientUpdate.getAdresse());
		assertEquals("", clientUpdate.getAdresseFacturation());
		assertEquals("", clientUpdate.getMail());
Donc la mise à jour de clientAUpdater ne se fait pas. Ce qui suit est le code de la méthode de mise à jour d'un client, de la couche DAO de mon appli :
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
21
22
23
public void updateSecteursActivite(SecteursActivite secteurActiviteAMettreAJour) {
		try {
			if (secteurActiviteAMettreAJour != null
					&& !secteurActiviteAMettreAJour.getNom().equals("")) {
				// récupération de la session du secteur d'activité ou création d'une
				// nouvelle
				logger.info("mise à jour du secteur d'activité "+ secteurActiviteAMettreAJour.getNom());
 
				// mise à jour du secteur d'activité grâce à hibernate :
				// autorisé grâce à "@Transactional (readOnly=false)" de la
				// couche service
				getHibernateTemplate().update(secteurActiviteAMettreAJour);
			} else {
				logger.error("Sur la méthode updateSecteursActivite");
				throw new IllegalArgumentException(
						"méthode updateSecteursActivite : secteurActiviteAMettreAJour null !");
			}
 
		} catch (DataAccessException e) {
			logger.error("Exception - DataAccesException : " + e.getMessage()
					+ " sur la méthode updateSecteursActivite");
		}
	}
Quelqu'un peut-il me dire ce qui ne va pas dans ma méthode de test ?

En vous remerciant,
Nicolas