Différent obj. déjà existant ds la session
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 :
Code:
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"); |
le code de mon action est comme suite :
Code:
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;
}
} |
Comment faire pour utilisé l objet deja existant dans la session pour en faire un Update??
Merci de votre aide.