首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Hibernate乐观锁定异常恢复

从Hibernate乐观锁定异常恢复
EN

Stack Overflow用户
提问于 2020-04-29 09:19:55
回答 2查看 1K关注 0票数 0

最近我一直面临着一个奇怪的问题。我试着优雅地处理陈旧的状态异常。但是在catch块中,它仍然抛出异常。下面是代码片段

代码语言:javascript
复制
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
}

有人能看看这个吗。我无法理解为什么它在正确处理后仍然抛出乐观锁定异常。

编辑1堆栈跟踪

org.springframework.orm.hibernate5.HibernateOptimisticLockingFailureException:批处理更新返回更新中意外的行数;实际行数: 0;预期: 1;嵌套异常为org.hibernate.StaleStateException:批处理更新返回来自更新的意外行计数;实际行计数: 0;预期:1信息在org.springframework.orm.hibernate5.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:283)在org.springframework.orm.hibernate5.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:755)信息在org.springframework.orm.hibernate5.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:590)信息在org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:765)信息在org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:734)信息在org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:518)信息在org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:292)信息,org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)信息在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)信息,org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)信息在com.sun.Proxy。$Proxy155.SaveOrUpdate(未知来源)信息在biz.kaar.common.services。appointment.impl.AppointmentServiceExtension1BOImpl.handleStaleStateException(AppointmentServiceExtension1BOImpl.java:1520)信息,biz.kaar.common.services.appointment.impl.AppointmentServiceExtension1BOImpl.saveSAR(AppointmentServiceExtension1BOImpl.java:845)信息,biz.kaar.common.services.DBServiceImpl.saveSAR(DBServiceImpl.java:382)信息,sun.reflect.NativeMethodAccessorImpl.invoke0(Native方法)信息,sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)信息,sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)信息,java.lang.reflect.Method.invoke( net.sf.gilead.gwt.PersistentRemoteService.processCall(PersistentRemoteService.java:115) )信息在biz.kaar.common.security.AuthorizedGWTServlet.processCall(AuthorizedGWTServlet.java:252)信息在biz.kaar.common.services.RemoteServletWithLogging.processCall(RemoteServletWithLogging.java:90)信息在com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:373)信息在com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)javax.servlet.http.HttpServlet.service(HttpServlet.java:707)信息javax.servlet.http.HttpServlet.service(HttpServlet.java:790)信息org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)信息org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)信息org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:316)信息org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityIntercep

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-01 14:16:47

问题解决了,我在to字段中复制了关联子实体的版本,这会导致较早版本的子实体被保存,从而导致错误。

票数 0
EN

Stack Overflow用户

发布于 2020-04-29 09:31:24

在catch块中,您应该捕获要处理的抛出的异常。你抓住Optimistic locking exception了。我甚至无法想象这是如何编译的。尝试将其替换为堆栈跟踪中异常的名称?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61498337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档