Восстановление из Hibernate Optimisti c Исключение блокировки - PullRequest
0 голосов
/ 29 апреля 2020

В последнее время я столкнулся со странной проблемой. Я попытался изящно обработать исключение устаревшего состояния. Но в блоке catch это все равно вызывает исключение. Ниже приведен фрагмент кода

public void saveObject(Object ob){
   try{
      sessionFactory.getCurrentSession().saveOrUpdate(ob);
   }catch(org.springframework.orm.hibernate5.HibernateOptimisticLockingFailureException e){
       object latestObject = // get latest object from db;
       copyFieldsFromObToLatestObject(ob,latestObject);
       // print the version of of both object

    LOGGER.info(" ui_version="+ob.getVersion().longValue()+" 
                 entity_version="+latestObject.getVersion().longValue());
          // the ui _version is less than entity_ version as expected 

        sessionFactory.getCurrentSession().saveOrUpdate(latestObject); // at this line I still get the same optimistic locking exception 

   }
}
 /**

 ob2 is the latest object which contains the correct  version hence copying the fields from previous object to this latest object
**/
private void copyFieldsFromObToLatestObject(ob1,ob2){
    ob2.setA(ob1.getA())..
   so on
}

Может кто-нибудь взглянуть на это. Я не могу понять причину, по которой он по-прежнему генерирует оптимистическое c исключение блокировки после правильной обработки

РЕДАКТИРОВАНИЕ 1 : трассировка стека :

org.springframework.orm.hibernate5.HibernateOptimisticLockingFailureException: пакетное обновление вернуло неожиданное количество строк из обновления [0]; фактическое количество строк: 0; ожидается: 1; вложенное исключение: org.hibernate.StaleStateException: пакетное обновление вернуло неожиданное количество строк из обновления [0]; фактическое количество строк: 0; ожидается: 1 [INFO] в org.springframework.orm.hibernate5.SessionFactoryUtils.convertHibernateAccessException (SessionFactoryUtils. java: 283) [INFO] в org.springframework.orm.hibernate5.HibernateTransactionManager.convertHiberAccess.Exchange.Exchange.Access.Exchange.Exchange.Exchange.Exchange.Rec. ) [ИНФОРМАЦИЯ] в org.springframework.orm.hibernate5.HibernateTransactionManager.doCommit (HibernateTransactionManager. java: 590) [ИНФО] в org.springframework.transaction.support.AbstractPlatformTransactionManager.processClangTransformTransactionManager.processCom_MBager.processCommit. INFO] в org.springframework.transaction.support.AbstractPlatformTransactionManager.commit (AbstractPlatformTransactionManager. java: 734) [INFO] в org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransingApport * (10) Transaction). в org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction (TransactionAspectSupport. java: 292) [ИНФО] в org.sprin gframework.transaction.interceptor.TransactionInterceptor.invoke (TransactionInterceptor. java: 96) [INFO] в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation. * 1024. aop.framework.JdkDynamicAopProxy.invoke (JdkDynamicAopProxy. java: 213) [INFO] в com.sun.proxy. $ Proxy155.saveOrUpdate (неизвестный источник) [INFO] в biz.kaar.common.services.appointment.impl. AppointmentServiceExtension1BOImpl.handleStaleStateException (AppointmentServiceExtension1BOImpl. java: 1520) [INFO] на biz.kaar.common.services.appointment.impl.AppointmentServiceExtension1BOImpl.saveIbl. services.DBServiceImpl.saveSAR (DBServiceImpl. java: 382). INFO] at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMetho dAccessorImpl. java: 43) [INFO] в java .lang.reflect.Method.invoke (Method. java: 498) [INFO] в net .sf.gilead.gwt.PersistentRemoteService.processCall ( PersistentRemoteService. java: 115) [INFO] на biz.kaar.common.security.AuthorizedGWTServlet.processCall (AuthorizedGWTServlet. java: 252) [INFO] на biz.kaar.common.services.RemoteServletWithLallitherer (( java: 90) [INFO] на com.google.gwt.user.server.rp c .RemoteServiceServlet.processPost (RemoteServiceServlet. java: 373) [INFO] на com.google.gwt.user.server .rp c .AbstractRemoteServiceServlet.doPost (AbstractRemoteServiceServlet. java: 62) [INFO] в javax.servlet.http.HttpServlet.service (HttpServlet. java: 707) [INFO] в javax. HttpServlet.service (HttpServlet. java: 790) [INFO] в org.eclipse.jetty.servlet.ServletHolder.handle (ServletHolder. java: 812) [INFO] в org.eclipse.jetty.servand.lerv $ CachedChain.doFilter (ServletHandler. java: 1669) [ИНФО] в org.springframework.securit y.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy. java: 316) [INFO] в org.springframework.security.web.access.intercept. FilterSecurityInterceptor.invoke (FilterSecurityIntercep

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

В блоке catch вы должны отловить исключение, которое выдается и которое вы хотите обработать. Вы ловите Optimistic locking exception. Я даже не представляю, как это компилируется. Попробуйте заменить его именем исключения в трассировке стека?

0 голосов
/ 01 мая 2020

Проблема была решена, я также копировал версию связанных дочерних сущностей в поле to, что приводило к сохранению более старой версии дочерних сущностей, что приводило к ошибке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...