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 :

Le fonctionnement de la méthode flush() [Core]


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Par défaut Le fonctionnement de la méthode flush()
    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
    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();
    Sachant que la méthode getSessionFlushAndClear
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        protected  Session getSessionFlushAndClear() {
        	flush();
        	clear();
    	 return getSession();
        }
    J'ai cette erreur
    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
    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
    	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;
    	}
    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
    Hibernate: 
        delete 
        from
            FTN_ECHEANCIER_ECH 
        where
            ECH_ID=?
    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.
    Comment je peux résoudre cette erreur, svp et surtout pourquoi est ce que j'ai cette erreur ?


    Merci à vous

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Par défaut
    Bon j'ai trouvé la solution

    http://stackoverflow.com/questions/2...e-0-actual-row

    A savoir qu' à chaque fois que je supprime des lignes, il faut mettre l'identifiant de l'objet supprimé à null ou zéro.
    Et cela fonctionne.

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

Discussions similaires

  1. Fonctionnement d'une méthode
    Par kanzarih dans le forum Langage
    Réponses: 3
    Dernier message: 27/07/2009, 22h51
  2. Fonctionnement de la méthode DragMode
    Par soso78 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/03/2007, 00h17
  3. Fonctionnement de la méthode Compiler
    Par Cyberbob002 dans le forum 4D
    Réponses: 6
    Dernier message: 21/11/2006, 18h38
  4. fonctionnent de la méthode run dans les threads
    Par L4BiN dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 25/07/2006, 11h06
  5. [PHP-JS] Méthode flush() qui ne fait rien
    Par Khrysby dans le forum Langage
    Réponses: 9
    Dernier message: 21/05/2006, 19h55

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