Bonjour tout le monde,
Je suis encore débutant en Hibernate, c'est ma première application avec.
Mon petit problème est que l'erreur suivante se provoque :
a different object with the same identifier value was already associated with the session: [com.kb.hibernate.Utilisateurs#52]
lorsque se produit quand je fais un load d'un objet (pour le mettre dans une forme de modification) puis je le modifie (action "update"), ts cela dans l'action suivante :
le code de mon action est comme suite :
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 UtilisateurForm userInputForm = (UtilisateurForm)form; String action = userInputForm.getAction(); HttpSession session = request.getSession(true); if(utilisateursDAO==null) utilisateursDAO = new UtilisateursDAO(); if(tx==null){ tx = utilisateursDAO.getSession().beginTransaction(); } tx.begin(); if(action.equals("add")){ user = new Utilisateurs(userInputForm.getNom(),userInputForm.getPrenom(),userInputForm.getEmail()); utilisateursDAO.save(user); tx.commit(); } if(action.equals("update1")){ utilisateursDAO = new UtilisateursDAO(); user = utilisateursDAO.findById(Integer.parseInt(userInputForm.getId())); session.setAttribute("nom", user.getNom()); session.setAttribute("prenom", user.getPrenom()); session.setAttribute("email", user.getEmail()); return actMap.findForward("updateReg"); } if(action.equals("update")){ user = new Utilisateurs(Integer.parseInt(userInputForm.getId()),userInputForm.getNom(),userInputForm.getPrenom(),userInputForm.getEmail()); utilisateursDAO.update(user); tx.commit(); } if(action.equals("delete")){ user = new Utilisateurs(Integer.parseInt(userInputForm.getId())); utilisateursDAO.delete(user); tx.commit(); } // Une récuperation des nouveaux éléments de la liste est indispensable userVect = new Vector(); userList = utilisateursDAO.findAll(); while(userList.hasNext()){ Utilisateurs utilisateur = (Utilisateurs) userList.next(); userVect.add(utilisateur); } request.setAttribute("AllUser", userVect); return actMap.findForward("success");
Comment faire pour utilisé l objet deja existant dans la session pour en faire un Update??
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 public void save(Utilisateurs transientInstance) { log.debug("saving Utilisateurs instance"); try { getSession().save(transientInstance); log.debug("save successful"); } catch (RuntimeException re) { log.error("save failed", re); throw re; } } public void update(Utilisateurs transientInstance){ log.debug("updating Utilisateurs instance"); try{ getSession().update(transientInstance); log.debug("update successfully"); }catch(RuntimeException re){ log.error("update failed", re); throw re; } } public void delete(Utilisateurs persistentInstance) { log.debug("deleting Utilisateurs instance"); try { getSession().delete(getSession().load(Utilisateurs.class, persistentInstance.getId())); log.debug("delete successful"); } catch (RuntimeException re) { log.error("delete failed", re); throw re; } } public Iterator findAll() { log.debug("getting all Utilisateurs instance "); try { Session session = getSession(); session.beginTransaction(); Query queryObject = session.createQuery("from com.kb.hibernate.Utilisateurs"); return queryObject.iterate(); } catch (RuntimeException re) { log.error("get failed", re); throw re; } } public Utilisateurs findById( java.lang.Integer id) { log.debug("finding Utilisateurs instance with id: " + id); try { Utilisateurs instance = (Utilisateurs) getSession().load("com.kb.hibernate.Utilisateurs", id); return instance; } catch (RuntimeException re) { log.error("get failed", re); throw re; } }
Merci de votre aide.
Partager