IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Différent obj. déjà existant ds la session


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Janvier 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2008
    Messages : 42
    Par défaut 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 : 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");
    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
    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.

  2. #2
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Janvier 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2008
    Messages : 42
    Par défaut
    problème résolu . En effet j'ai réutiliser l'objet déjà existant dans la session pour l'utiliser dans la modification. Le code est le suivant :
    Action Struts
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    		if(action.equals("update")){	
     
    			Utilisateurs userLoaded = (Utilisateurs)utilisateursDAO.getSession().load(Utilisateurs.class, Integer.parseInt(userInputForm.getId()));
    			userLoaded.setId(Integer.parseInt(userInputForm.getId()));
    			userLoaded.setNom(userInputForm.getNom());
    			userLoaded.setPrenom(userInputForm.getPrenom());
    			userLoaded.setEmail(userInputForm.getEmail());
     
    			utilisateursDAO.update(userLoaded);
    			tx.commit();
    		}
    UtilisateursDAO:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        public void update(Utilisateurs transientInstance){
        	log.debug("updating Utilisateurs instance");
        	try{
        		getSession().update(getSession().load(Utilisateurs.class, transientInstance.getId()));
        		log.debug("update successfully");   	
        	}catch(RuntimeException re){
        		log.error("update failed", re);
        		throw re;
        	}
        }
    Merci comme même.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Vérifier l'existance d'une session
    Par jpduches dans le forum Langage
    Réponses: 3
    Dernier message: 13/09/2006, 09h32
  2. Réponses: 5
    Dernier message: 11/09/2006, 17h29
  3. Tester l'existence d'une session
    Par waterbed dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 04/08/2006, 14h44
  4. Comment tester l'existence d'une session ?
    Par watcha2020 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 26/07/2006, 17h36
  5. Réponses: 4
    Dernier message: 03/05/2006, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo