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 :

org.hibernate.StaleStateException: Batch update returned unexpected row count from up


Sujet :

Hibernate Java

  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut org.hibernate.StaleStateException: Batch update returned unexpected row count from up
    Salut,

    J'ai l'exception suivante qui est lancée
    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
    org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
    	at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:61)
    	at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:46)
    	at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:68)
    	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
    	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
    	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
    	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:172)
    	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
    	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
    	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
    	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
    	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
    	at com.ullink.extranet.module.orderBookMonitoring.dao.orderBook.DaoOrderBookImpl.saveTblconfeventsync(DaoOrderBookImpl.java:748)
    	at com.ullink.extranet.module.orderBookMonitoring.service.orderBook.ServiceOrderBookImpl.saveTblconfeventsync(ServiceOrderBookImpl.java:395)
    	at com.ullink.extranet.module.orderBookMonitoring.odiSysConnection.threadPool.ThreadUpdateConfEventSync.run(ThreadUpdateConfEventSync.java:19)
    	at com.ullink.extranet.module.orderBookMonitoring.odiSysConnection.threadPool.WorkerThread.run(WorkerThread.java:38)
    Voila la méthode dans la quelle cette exception est lancée : Elle apparait sur le premier commit
    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
    public synchronized void saveTblconfeventsync(Tblconfeventsync obj) {
    		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    		try 
    		{
    			session.beginTransaction();
    			List<Tblconfeventsync> result = session.createQuery("from Tblconfeventsync").list();
    			Iterator<Tblconfeventsync> it = result.iterator();
    			while ( it.hasNext() )
    				session.delete(it.next());
    			session.getTransaction().commit();
     
    			session = HibernateUtil.getSessionFactory().getCurrentSession();
    			session.beginTransaction();
    			session.save(obj);
    			session.getTransaction().commit();
    		}
    		catch(Exception e) {
    			session.beginTransaction().rollback();
    			e.printStackTrace();
    		}
    	}
    J'essaye d'avoir toujours dans ma table un et un seul enregistrement correspondant au dernier événement que j'ai reçu. Pour cela je supprime les lignes qui existent avant puis je rajoute l'événement que je viens de recevoir.

    Cette méthode marche très bien dans une utilisation normale, cad appelée à un intervalle de temps relativement long. Mais dès que je l'appelle en rafale à quelque miliosecondes d'intervalle l'exception apparait.

    Avant j'avais :
    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 synchronized void saveTblconfeventsync(Tblconfeventsync obj) {
    		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    		try 
    		{
    			session.beginTransaction();
    			List<Tblconfeventsync> result = session.createQuery("from Tblconfeventsync").list();
    			Iterator<Tblconfeventsync> it = result.iterator();
    			while ( it.hasNext() )
    				session.delete(it.next());
     
    			session.save(obj);
    			session.getTransaction().commit();
    		}
    		catch(Exception e) {
    			session.beginTransaction().rollback();
    			e.printStackTrace();
    		}
    	}
    J'ai essayé de séparer les transaction croyant que ça pourrait résoudre le problème, mais sans résultat.

    Toute proposition sera la bienvenue.

    D'aprés la doc
    http://www.hibernate.org/hib_docs/v3...Exception.html
    Peut etre quand je veut supprimer la ligne entre temps un autre thread la supprime, mais c'est bizar comme meme car j'ai bien un synchronized sur cette méthode !!
    Ou bien d'anciennes données, là je sais pas trop comment prévenir ça

    Merci

  2. #2
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    En limitant l'acces a un seul thread pour cette méthode, le probelme a disparu.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/08/2014, 11h26
  2. Réponses: 20
    Dernier message: 13/10/2009, 17h31
  3. Réponses: 0
    Dernier message: 24/10/2008, 14h35
  4. Réponses: 2
    Dernier message: 03/10/2008, 16h09
  5. org.hibernate.hql.ast.QuerySyntaxError: unexpected token
    Par oughlad dans le forum Hibernate
    Réponses: 9
    Dernier message: 26/05/2006, 14h20

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