Salut,
J'ai l'exception suivante qui est lancée
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 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)
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.
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(); } }
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 :
J'ai essayé de séparer les transaction croyant que ça pourrait résoudre le problème, mais sans résultat.
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(); } }
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
Partager