Deux objets avec le même identifiant pour une session
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:
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:
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:
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