В последнее время я столкнулся со странной проблемой. Я попытался изящно обработать исключение устаревшего состояния. Но в блоке 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