StaleStateException lors du commit
Bonjour,
celà fait maintenant quelques jours que je suis sur un problème de sauvegarde de données via hibernate.
L'exception est levée lorsque je fait un commit(). Voici le code source.
nom de l'exception:StaleStateException.
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
| public String verifUser(){
Session session = HibernateUtil.getSessionFactory();
session.beginTransaction();
users=new Users();
users = (Users)session.get(users.getClass(),login,LockMode.UPGRADE);
if(users != null) {
if(users.getPwd().compareTo(pwd)==0){
//session.createQuery("UPDATE Users us set us.connected ='Y' where us.user='"+users.getUser()+"'").executeUpdate();
//session.createSQLQuery("UPDATE USERS set connected ='Y' where user='"+users.getUser()+"'").executeUpdate();
users.setConnected('Y');
session.getTransaction().commit();
addMovement("IDEN");
HibernateUtil.getSessionFactory().clear();
return "login";
}
else {
setErrorMsg("PASSWORD IS NOT CORRECT, VERIFY PLEASE");
return "null";
}
}
else {
setErrorMsg("LOGIN IS NOT CORRECT, VERIFY PLEASE");
//users = new Users();
HibernateUtil.getSessionFactory().clear();
return "null";
}
} |
Chaque utilisateur qui se connecte fera appel à cette méthode. Le problème se situe lorsque je veux modifer le status de cette utilisateur (users.setConnected('Y');) et que je fait le commit() juste après.
J'espère que vous me donnerez une petite explication sur ce problème.
Merci d'avance.
stale exception=modif concurrente
Ton exception est levee si un object a ete modifie par quelqu un s qutre entre le moment ou tu l a chagre et le moment ou tu sauve
ex
user A charge l objet
user B charge le meme objet
user b sauve ses modif sur l object
user A veut sauver ses modif et se prend cette exception (normal, sinon les modif de B seraient perdues)
pour ton code, il me semble que tu devrait fermer les transaction et la session apres tes modifs (c ets peut etre fait plus loin hors de l extrait qui tu as mit)
Sinon je parie que c est ca, tu ne ferme pas la session et au 2eme appel tu te prend cette exception