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 :

Pb Synchronisation de session


Sujet :

Hibernate Java

  1. #1
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut Pb Synchronisation de session
    qlq 1 connait il la cause de cette erreur:
    Could not synchronize database state with session.
    on fait voila:
    je recupere une liste d objet on faisant appel a cette methode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public List lectureCandidat() throws HibernateException{
            Session s = HibernateUtil.currentSession();
     
            List listeCandidats = s.find("from Candidats");
     
            Transaction tx= s.beginTransaction();
            tx.commit();
            //HibernateUtil.closeSession();
     
    		return listeCandidats;
    	}
    Quad je ferme la session j ai une erruer d ou le://HibernateUtil.closeSession();
    Apres je modifier un objet de la liste au je fait une maj en faisant appel a cet methode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void updateCandidat(Candidats cand) throws HibernateException{
            Session s = HibernateUtil.currentSession();
            Transaction tx= s.beginTransaction();
            s.saveOrUpdate(cand);
            tx.commit(); 
           HibernateUtil.closeSession();
    		return ;
    et la j ai l erreur:Could not synchronize database state with session
    Merci pour votre aide.

  2. #2
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut
    en fait l erreure ce produit quand j ajout ce qui est marqué en rouge dans le code suivant
    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
    <hibernate-mapping package="com.sbpm.modele">
    	<class name="Candidats" table="CANDIDATS">
    		<id
    			column="NUMCANDIDAT"
    			name="Numcandidat"
    			type="integer"
    		>
    			<generator class="increment" />
    		</id>
    		<property
    			column="NOM"
    			length="40"
    			name="Nom"
    			not-null="false"
    			type="string"
    		 />
    		<property
    			column="PRENOM"
    			length="40"
    			name="Prenom"
    			not-null="false"
    			type="string"
    		 />
    			
    		<set name="CANDIDATLANGUESet" lazy="true" inverse="true" cascade="all" >
    			<key column="NUMCANDIDAT" />
    			<one-to-many class="Candidatlangue" />
    		</set>
    	</class>
    </hibernate-mapping>

  3. #3
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut
    PLZ de l aide je suis vompletement bloqué.

  4. #4
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut
    tous le monde est en vacances ou qui, il n y a personne pour m aider

  5. #5
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    Tu peux montrer la trace complete de l'erreur.

  6. #6
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut
    Voila la trace que t as demandé:
    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
    9 août 2007 13:26:57 net.sf.hibernate.impl.SessionImpl execute
    GRAVE: Could not synchronize database state with session
    net.sf.hibernate.HibernateException: SQL insert, update or delete failed (row not found)
    	at net.sf.hibernate.impl.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:25)
    	at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.java:684)
    	at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.java:642)
    	at net.sf.hibernate.impl.ScheduledUpdate.execute(ScheduledUpdate.java:52)
    	at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2418)
    	at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2372)
    	at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2240)
    	at net.sf.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:61)
    	at com.sbpm.dba.DbaCandidat.updateCandidat(DbaCandidat.java:53)
    	at com.sbpm.controle.CtrlManagerCandidat.majCandidat(CtrlManagerCandidat.java:72)
    	at com.sbpm.vue.VueSaisieCandidat.modifierCandidat(VueSaisieCandidat.java:2325)
    	at com.sbpm.vue.VueSaisieCandidat.access$9(VueSaisieCandidat.java:2323)
    	at com.sbpm.vue.VueSaisieCandidat$7.actionPerformed(VueSaisieCandidat.java:2316)
    merci d avance de ton aide willoi

  7. #7
    Membre éclairé Avatar de DjGonk
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    Salut,

    Pourquoi tu dois avoir cascade="all" dans ton mapping? Ce n'est pas nécessaire pour ce type de relation à mon avis. Peux tu nous mettre ton mapping de Candidatlangue.

  8. #8
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut
    Salut DjGonk,
    quand je supprime cascade="all", j ai pas d erreur mes ma table candidatlangue n est pas remplis.
    voila le mappin de candidatLangue :
    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
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    	"-//Hibernate/Hibernate Mapping DTD//EN"
    	"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
     
    <hibernate-mapping package="com.sbpm.modele">
    	<class
    		name="Candidatlangue"
    		table="CANDIDATLANGUE"
    	>
    		<composite-id name="Id" class="CANDIDATLANGUEPK">
    			<key-many-to-one
    				name="Numcandidat"
    				class="Candidats"
    				column="NUMCANDIDAT"
    			/>
    			<key-many-to-one
    				name="Numlangue"
    				class="Langues"
    				column="NUMLANGUE"
    			/>
    		</composite-id>
    		<property
    			name="Niveau"
    			column="NIVEAU"
    			type="string"
    			not-null="true"
    			length="20"
    		/>
    	</class>
    </hibernate-mapping>
    en faite tous mes fichier de mapping je les ai generer par Hibernate Synchriniser a partir des table de ma base de donnée.

  9. #9
    Membre éclairé Avatar de DjGonk
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    Bon si j'ai bien compris tu as ce schéma là :
    Candidat - CandidatsLang - Langue

    Quand tu ajoutes une langue à un candidat fait de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    candidat.getLang.add(new CandidatsLang(0,0));
    session.flush();
    Par contre bien mettre not-null="true" dans le mapping de candidatlang

    Sinon va voir sur ce lien :
    http://www.hibernate.org/hib_docs/v3...rentchild.html

  10. #10
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut
    mo j ai essayé ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	Iterator itCandLg=this._candidatLangueSet.iterator();
            while(itCandLg.hasNext()){
            	Candidatlangue candLg= (Candidatlangue) itCandLg.next();
            	this._candCourant.getCANDIDATLANGUESet().add(candLg);
            }
    et ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this._candCourant.setCANDIDATLANGUESet(this._candidatLangueSet);
    et je fait un affichage de setCANDIDATLANGUESet juste avant de sauvgarder,
    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
    /*Ajout d un candidat dans la base de données*/
    	public void addCandidat(Candidats cand) throws HibernateException{
            Session s = HibernateUtil.currentSession();
            /*Iterator itCandLg=cand.getCANDIDATLANGUESet().iterator();
            while(itCandLg.hasNext()){
            	Candidatlangue candLg= (Candidatlangue) itCandLg.next();
            	System.out.print("Insertion: "+candLg.getId().getNumcandidat().getNom()+" ");
            	System.out.print(candLg.getId().getNumlangue().getNomlangue()+" ");
            	System.out.println(candLg.getNiveau());
            }*/
     
           s.save(cand);
           //session.saveOrUpdate(cand);
           //session.flush();
     
            Transaction tx= s.beginTransaction();
            tx.commit();
            HibernateUtil.closeSession();
    		return ;
    	}
    ca me donne bien tous ce que j ai saisie vie mon interface graphigue, mais la sauvgarde dans la base de données remplis juste la table candidats main non la table candidatlangue c est pourquoi j ai ajouter cascade="all", mais la ca plante.

    le code que tu m as donné je peus pas l utiliser car quand je set mon objet candidat je le fait en de hors de la session et apres je fait appel a la methode:addCandidat(Candidats cand)
    ah le lien http://www.hibernate.org/hib_docs/v3...rentchild.html marche pas.

  11. #11
    Membre éclairé Avatar de DjGonk
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    Ah ok. Sauvegarde déjà Candidat sans lui donner CandidatsLang. Ensuite tu lui ajoutes le CandidatsLang et tu fais un refresh.

    Pour le lien c'est le site d'hibernate qui plante.

  12. #12
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut
    j ai deja essayer ca
    appel a la methode:addCandidat(Candidats cand) si haut, qui enregistre juste le candidat
    et apres appel de la methode addCandidatlangues(Candidats ca) dont le
    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
    public void addCandidatlangues(Candidats ca)throws HibernateException{
    		Session session = HibernateUtil.currentSession();
            Transaction tx= session.beginTransaction();
            Candidats cand = (Candidats) session.load(Candidats.class,ca.getNumcandidat());
    		Iterator itCandLg=cand.getCANDIDATLANGUESet().iterator();
            while(itCandLg.hasNext()){
            	Candidatlangue candLg= (Candidatlangue) itCandLg.next();
            	System.out.println("Debut sauvgarde");
            	session.saveOrUpdate(candLg);
            	System.out.println("Fin sauvgarde");
            	System.out.print("Insertion: "+candLg.getId().getNumcandidat().getNom()+" ");
            	System.out.print(candLg.getId().getNumlangue().getNomlangue()+" ");
            	System.out.println(candLg.getNiveau());
            } 
            tx.commit();
            HibernateUtil.closeSession();
    		return ;
    	}
    mais tj meme pb de synchronisation de la session

  13. #13
    Membre éclairé Avatar de DjGonk
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    Ta session est toujours ouverte après l'enregistrement de Candidat? Car si elle est fermée c'est normale que tu n'ais pas de synchronization avec la BD. Essaye en ne fermant pas la session. Si tu l'as déjà fait je n'ai pas d'autres pistes pour le moment. Attache peut-être ton code en plus simple que l'on puisse tester (avec le schéma de tes 3 tables).

  14. #14
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut
    oui j ai deja essayé cet solution aussi mais ca n a pas marcher
    de toute facon merci pour ton aide

Discussions similaires

  1. Synchronisation en fin de session
    Par hpavavar dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 02/09/2009, 14h08
  2. variable de session (synchronisation)
    Par fab76000 dans le forum Langage
    Réponses: 3
    Dernier message: 28/01/2009, 12h16
  3. Synchronisation de sessions
    Par fab76000 dans le forum Langage
    Réponses: 2
    Dernier message: 29/12/2008, 18h14
  4. Réponses: 18
    Dernier message: 10/11/2006, 13h33
  5. synchroniser les acces a la session http
    Par decksroy dans le forum Hibernate
    Réponses: 28
    Dernier message: 11/10/2006, 10h41

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