Hello tout le monde, j'ai un peu de mal à voir comment fonctionne le flush sous hibernate car je suis confronté un problème.
Lorsque j'essaie de récupérer un objet de la base de donnée avec ce bout de code
Sachant que la méthode getSessionFlushAndClear
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 vContrat = (ContratVO) getSessionFlushAndClear() .createCriteria(ContratVO.class) .add(Restrictions.eq(ConstantesContrat.CNT_CODE, pCodeContrat)).uniqueResult();
J'ai cette erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 protected Session getSessionFlushAndClear() { flush(); clear(); return getSession(); }J'ai peu être une piste mais avant de faire appel à cette méthode plus haut, je fais une recherche sur des données à supprimer puis j'appelle cette fonction :
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72 org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; nested exception is org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:675) at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412) at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411) at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374) at org.springframework.orm.hibernate3.HibernateTemplate.flush(HibernateTemplate.java:881) at com.edf.ftn.data.hibernate.BaseDAOHibernate.flush(BaseDAOHibernate.java:343) at com.edf.ftn.data.hibernate.BaseDAOHibernate.getSessionFlushAndClear(BaseDAOHibernate.java:396) at com.edf.ftn.data.dao.contrat.ContratDAO.getContratByCode(ContratDAO.java:855) at com.edf.ftn.data.manager.facture.FactureManager.getContratFactureByCodeWithFlush(FactureManager.java:1415) at com.edf.ftn.metier.domaine.facture.FactureBO.getContratFactureByCodeWithFlush(FactureBO.java:535) at com.edf.ftn.metier.domaine.facture.workflow.echeancier.WorkflowEcheancier.generationAutomatiqueEcheancier(WorkflowEcheancier.java:156) at com.edf.ftn.metier.domaine.facture.EcheancierBO.majEcheancierPourAvenantDateEffet(EcheancierBO.java:770) at com.edf.ftn.metier.domaine.facture.EcheancierBO.majEcheancierPourAvenant(EcheancierBO.java:598) at com.edf.ftn.metier.services.ServicesMetierImpl.majEcheancierPourAvenant(ServicesMetierImpl.java:3852) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:592) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) at $Proxy169.majEcheancierPourAvenant(Unknown Source) at com.edf.ftn.web.contrat.action.EnregistrerAvenantAction.execute(EnregistrerAvenantAction.java:299) at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:113) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226) at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283) at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:70) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42) at org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(Unknown Source) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(Unknown Source) at weblogic.servlet.internal.WebAppServletContext.securedExecute(Unknown Source) at weblogic.servlet.internal.WebAppServletContext.execute(Unknown Source) at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1366) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200) at weblogic.work.ExecuteThread.run(ExecuteThread.java:172) Caused by: 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.BatchingBatcher.addToBatch(BatchingBatcher.java:34) at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2470) at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2647) at org.hibernate.action.EntityDeleteAction.execute(EntityDeleteAction.java:74) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:144) 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.springframework.orm.hibernate3.HibernateTemplate$28.doInHibernate(HibernateTemplate.java:883) at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406) ... 50 more
Dans la console, je vois bien les requetes que fait hibernate
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public boolean supprimerEcheancierById(final Integer pId) { boolean vRetour = true; try { getHibernateTemplate() .delete(getObject( pClazz, pId)); } catch (HibernateException vEx) { LOGGER.error(vEx.getMessage(), vEx); throw new FtnExceptionTechnique(vEx.getMessage(), vEx); } return vRetour; }Pourtant ce sont 2 choses différentes. Je ne vois pas en quoi la suppression des données qui impactent une table puisse avoir des répercussions sur un select qui sélectionne uniquement des contrats.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Hibernate: delete from FTN_ECHEANCIER_ECH where ECH_ID=?
Comment je peux résoudre cette erreur, svp et surtout pourquoi est ce que j'ai cette erreur ?
Merci à vous
Partager